1

重複
の可能性:bashスクリプトで、スクリプトファイル名を知るにはどうすればよいですか?

他の必要なリソースを参照するために、bashスクリプトのファイルシステムが必要になることがよくあります。通常、シバン行の後に次のコードを並べて使用します。'scriptPos'という変数を設定し、スクリプトの現在のパスを含めます

scriptPos=${0%/*}

正常に動作しますが、シェル拡張を置き換えるためのより直感的なものはありますか?

4

2 に答える 2

1

ありますdirnameが、それは必要forkです:

scriptPos=$(dirname "$0") 
于 2012-09-10T15:02:47.690 に答える
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") )
于 2012-09-10T15:05:33.863 に答える