web-dev-qa-db-ja.com

スクリプト間で引数を渡す

私がBashスクリプトを使用していて、ファイルを調達しているとします。このようにファイルを読み込んだ後、別のスクリプトに変数を渡すにはどうすればよいですか。

sed -i 's/ = /=/' $file
source $file

ファイルが含まれているとしましょう

variable1=10
variable2=Apple

これらを別のスクリプトで使用したい場合、これらの引数を他のスクリプトに渡し、現在のBashスクリプトでスクリプトを実行する方法を教えてください。

2
user317784

他の方法で引数を渡すのとほとんど同じようにそれらを渡します。

sed -i 's/ = /=/' "$file"
source "$file"

/path/to/another/script.sh "$variable1" "$variable2"

明らかに適切なコマンドラインスイッチを使用します(または該当しない場合)。

上記のコードを使用する場合、$variable1の値は$1(最初のコマンドライン引数)として他のスクリプトで使用でき、$variable2$2として使用できます。

新しいスクリプトで元の名前を保持するには、位置パラメーターを使用してそれらを再割り当てする必要があります。

variable1=$1
variable2=$2

ただし、これはこれを行うための最も効率的な方法ではない可能性があります。以下の提案をお勧めします。


実際には、最初のスクリプトではなく、2番目のスクリプト内でファイルを調達したい場合があります。その場合、次のことを実行することをお勧めします。

script1.sh:

sed -i 's/ = /=/' "$file"
/path/to/another/script2.sh "$file"

script2.sh:

file=$1
source "$file"
printf '%s\n' "$variable1"
printf '%s\n' "$variable2"

関連する推奨読書: .4.1位置パラメータ

注:$1file変数に割り当てる必要はありません。単にsource "$1"にすることもできますが、位置パラメーターがどのように処理されるかを示すために、このように記述しました

4
jesse_b

渡す変数が多すぎない場合は、添え字を呼び出す行に変数を設定するのが妥当です。

sed -i 's/ = /=/' "$file"
source "$file"

variable1=$variable1 variable2=$variable2 /path/to/another/script.sh
0
Matt Balvin