1

次のように、環境変数を設定する abc.sh という単純なスクリプトがあります。

#!/bin/bash
sourcePath () {
filename=`basename $0`

current_dir="./"$filename
if [ "$current_dir" = "$0" ]; then        SRC_DIR=$(pwd) 
         SRC_DIR=$(cd "$SRC_DIR/.."; pwd)
else        SRC_DIR=$(cd "$(dirname "$0")/.."; pwd)
fi
}

sourcePath
echo $SRC_DIR
export SRC_DIR

このスクリプトで、現在のシェル環境で変数 SRC_DIR を設定したいと考えています。したがって、ソースabc.shを実行すると、dirnameへのオプションが無効であるというエラーが表示されます。しかし、このファイルを./abc.shで実行すると、エラーは発生しませんが、変数はエクスポートされません

4

2 に答える 2

3

問題の一部は、スクリプトを調達するときに$ 0の値が異なることです。これは、調達がシェルに直接コマンドを入力するのとまったく同じであるためです。したがって、スクリプトを実行する場合、$ 0はabc.shですが、スクリプトをソースする場合、$0は/bin/bashです。これは、-xフラグを設定することで確認できます。

set -x
source abc.sh

しかし、これが唯一の問題であるかどうかはわかりません。スクリプトをソース化するときに、dirnameからエラーが発生せず、スクリプトが「/」を出力するためです。

于 2012-07-24T14:45:45.310 に答える
0

を実行するとsource$0変更されません (実行可能ファイルの名前にはなりません。例: ./abc.sh)。

于 2012-07-24T14:42:44.327 に答える