目的
シェルスクリプトを書く際に、毎回調べていることを備忘録としてメモしていく。
カレントディレクトリのパスを取得したい
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