74

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

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

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

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

#!/bin/sh
echo $variable

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

4

2 に答える 2

156

sh 1.shまたは./1.shThenのようにファイルを実行している場合は、サブシェルで実行しています。

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

. 1.sh
# OR
source 1.sh

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

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

于 2012-05-28T08:54:17.537 に答える
10

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

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

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

の効果を確認しますexport

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

#!/bin/sh
. ./1.sh
echo $variable
于 2012-05-28T08:52:42.470 に答える