[Shell] $(cd $(dirname $0) && pwd) を理解する
2011年8月14日
CURRENT=$(cd $(dirname $0) && pwd) とは
これは CURRENT変数へスクリプトファイルのカレントディレクトリを格納する
シェルスクリプトのお便利ワンライナーです
シェルスクリプトのお便利ワンライナーです
#!/bin/sh
CURRENT=$(cd $(dirname $0) && pwd)
echo $CURRENT # -> どこから実行してもファイルの場所を返す
しかし、意味不明
最近これを知って便利に使っているんですが、自分のShellScrpit力の低さから理解不能でした
ということで、勉強することにしました
ということで、勉強することにしました
各要素の解説
特殊変数や記法などの整理です
$0 = スクリプトファイル名が入る dirname 引数 = 引数文字列のディレクトリ部分だけを返す && = 左辺のコマンドがステータス0の正常終了なら右辺も実行する $() = プログラミングの (式) と同じように式の分離や実行順序を明示するものみたい pwd = カレントディレクトリを返す、説明不要だと思いますが
実行順序
こうみたいです
「cd でスクリプト設置場所へ移動した後に pwd でその場所を返している」というロジック
「cd でスクリプト設置場所へ移動した後に pwd でその場所を返している」というロジック
dirname $0 ↓ cd $(dirname $0) ↓ cd $(dirname $0) && pwd ↓ CURRENT=$(cd $(dirname $0) && pwd)
疑問点
なんで cd をしているのにディレクトリが移動しないのでしょうか?
$( ~ ) 書式によるものっぽいのですが、これがわからないです。
解説サイトを絶賛募集中!