他の必要なリソースを参照するために、bashスクリプトのファイルシステムが必要になることがよくあります。通常、シバン行の後に次のコードを並べて使用します。'scriptPos'という変数を設定し、スクリプトの現在のパスを含めます
scriptPos=${0%/*}
正常に動作しますが、シェル拡張を置き換えるためのより直感的なものはありますか?
他の必要なリソースを参照するために、bashスクリプトのファイルシステムが必要になることがよくあります。通常、シバン行の後に次のコードを並べて使用します。'scriptPos'という変数を設定し、スクリプトの現在のパスを含めます
scriptPos=${0%/*}
正常に動作しますが、シェル拡張を置き換えるためのより直感的なものはありますか?
ありますdirname
が、それは必要fork
です:
scriptPos=$(dirname "$0")
1つのオプションは
scriptPos=$(dirname $0)
これには余分なプロセスが必要ですが、より自己記述的です。スクリプトが直接現在のものである場合、出力は異なります(私の意見では):
#!/bin/bash
scriptPos=$(dirname $0)
echo '$0:' $0
echo 'dirname:' $scriptPos
echo 'expansion:' ${0%/*}
$ bash tmp.bash
$0: tmp.bash
dirname: .
expansion: tmp.bash
更新:jm666によって指摘された欠点に対処する試み。
#!/bin/bash
scriptPos=$( v=$(readlink "$0") && echo $(dirname "$v") || echo $(dirname "$0") )