0

次の行は、シェル スクリプトPROGUARD_HOME内にローカル変数を導入します。

PROGUARD_HOME=`dirname "$0"`/..

これは、シェル スクリプトの親フォルダーを指します。スクリプトは正常に実行されます。/usr/local/bin/proguard- 次に、を参照するシンボリック リンクを作成しました~/bin/proguard4.10/bin/proguard.sh。シンボリックリンクを使用してプロガードを実行すると、PROGUARD_HOME正しく解決されなくなりました。これにより、シェル スクリプトによって次のエラー メッセージが出力されます。

エラー: jarfile /usr/local/bin/../lib/proguard.jar にアクセスできません

環境変数の割り当てを書き直して、存在する場合にシンボリック リンクを解決するにはどうすればよいですか? シェルスクリプトのシンボリックリンクの解決に関する非常によく似た質問を認識していますが、これらのソリューションをここで親フォルダーアプローチと組み合わせる方法をまだ理解できません。

4

1 に答える 1

1

readlink -f $0シェルスクリプト自体のターゲットを明らかにし、次にdirnameスクリプトを削除し、その製品で別の方法readlink -fでトリックを行う必要があると思います:

PROGUARD_HOME=$(readlink -f $(dirname $(readlink -f "$0"))/..)

より段階的な内訳:

echo "\$0 is $0"
TRUENAMEOFSCRIPT=$(readlink -f $0)
echo "readlink -f of \$0 reveals $TRUENAMEOFSCRIPT"

DIRNAMEOFSCRIPT=$(dirname $TRUENAMEOFSCRIPT)
echo "The script lives in directory $DIRNAMEOFSCRIPT"

PARENTDIR=$(readlink -f "$DIRNAMEOFSCRIPT"/..)
echo "Its parent dir is $PARENTDIR"
于 2013-11-04T15:08:56.933 に答える