スクリプトのソースと実行の唯一の違いは、後者の場合、親環境は影響を受けないことです。
次のサンプル スクリプトを検討してください。
SETUP_DIR=`dirname $0`
echo $SETUP_DIR
echo $0
echo $1
上記のスクリプトは、実行中のスクリプトのディレクトリ名を取得するだけです。ソースを取得しようとすると、上記のスクリプトは次のエラーで失敗します
$ . test.sh foo
dirname: invalid option -- k
Try `dirname --help' for more information.
-ksh
foo
私が思う理由は、それを調達するときに、スクリプトが親環境シェルで実行されるため、シェル名が最初の引数として渡されるため-ksh
です。
が原因でdirname -ksh
失敗します-k
。これは無効なオプションですdirname
奇妙なことに、この問題は、sh または bash で実行している場合には発生しません。
$ sh
sh-3.2$ . test.sh foo
.
sh
foo
sh-3.2$ bash
bash-3.2$ . test.sh foo
.
bash
foo
bash-3.2$
- だから私は疑問に思っていました.KornShell(ksh)で文書化された既知の動作ですか?この問題を解決するにはどうすればよいですか?
- 私の2番目の一般的な質問は、なぜ
dirname 'sh'
現在のディレクトリを返すのかということです.