0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

シェルスクリプトのイディオムいろいろ

Last updated at Posted at 2020-11-06

目的

シェルスクリプトを書く際に、毎回調べていることを備忘録としてメモしていく。

カレントディレクトリのパスを取得したい

CURRENT=$(cd $(dirname $0); pwd)

(コマンド例の引用元: ajisaba.net)

[参考] $( )について

ドル丸括弧 $( )はシェルスクリプトの構文で、コマンドのグルーピングと呼ばれる機能。
$( )は内部的にForkシステムコールを発行することになり、括弧内のコマンド郡を子プロセスにて処理が実行される。
子プロセスなため、環境変数は呼び出し元スクリプト(親プロセス)のモノを引き継ぐが、
子プロセス側で書き換えた環境変数は親プロセス側には影響しない。

meruneru@MacBook-Pro:~$ printenv
...
PWD=/Users/meruneru
...
meruneru@MacBook-Pro:~$ $(cd ..) #呼び出しに影響しないため、PWDは変更されない
meruneru@MacBook-Pro:~$ 

ディレクトリを移動->特定のコマンド実行->元のパスへ戻りたい

ドル丸括弧 $( )は呼び出し元スクリプトの環境変数に影響を与えないという性質を利用すればいい。

cd $HOME
$(cd ~/works/example_program/; make)
...  # カレントディレクトリは$HOME

カレントディレクトリのフォルダを任意の場所へ移動する

find のdepthオプションで階層指定ができる。
grep のvオプションはマッチしたもの以外を表示でき、Eオプションで正規表現が指定できる。
xargs -I{} でxargsで受け取った文字列を任意の場所に埋め込める。

$ find . -type d  -depth 1 | grep -v -E ".git|.vscode"  | xargs -I{} mv {} ./old
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?