web-dev-qa-db-ja.com

シェルスクリプトでエクスポートが機能しない

2つのスクリプト1.shと2.shがあります。

1.shは次のとおりです。

#!/bin/sh
variable="thisisit"
export variable

2.shは次のとおりです。

#!/bin/sh
echo $variable

私が読んだことによると、このように(エクスポート)することで、あるシェルスクリプトの変数に別のスクリプトからアクセスできます。しかし、これは私のスクリプトでは機能しません。誰か助けてください。前もって感謝します。

39
Xander

sh 1.sh./1.shなどのファイルを実行している場合、サブシェルで実行しています。

現在のシェルで変更を行うには、次のようにします。

. 1.sh
# OR
source 1.sh

reference-documentation を検討することを検討してください。

source [または.]を使用してスクリプトを実行すると、既存のシェル内で実行され、スクリプトによって作成または変更された変数は、スクリプトが完了します。対照的に、スクリプトがfilenameとして実行される場合、スクリプトを実行するために別個のサブシェル(変数の完全に別個のセット)が生成されます。」

84
linuxeasy

exportは、実行中のシェルの環境に変数を配置するため、スクリプトによって実行されるプロセスに渡されますが、スクリプトまたは他のプロセスを呼び出すプロセスには渡されません。実行してみてください

#!/bin/sh
FOO=bar
env | grep '^FOO='

そして

#!/bin/sh
FOO=bar
export FOO
env | grep '^FOO='

exportの効果を確認します。

1.shから2.shに変数を取得するには、2.shから1.shを呼び出すか、1.sh2.shをインポートします。

#!/bin/sh
. ./1.sh
echo $variable
6
Fred Foo