2012-05-28 36 views
25

我有兩個腳本1.sh和2.sh.導出不能在我的shell腳本中工作

1.sh如下:

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

2.sh如下:

#!/bin/sh 
echo $variable 

根據我讀,做這樣的(出口)可以訪問一個變量從另一個shell腳本。但是這不適用於我的腳本。有人可以請幫忙嗎?提前致謝。

+0

以及你如何執行這些shell腳本? – linuxeasy

+0

另請參閱:http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-scrip#176788和http:// unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b – lesmana

+0

我首先在終端運行1.sh,然後在同一終端運行2.sh。 .. – Xander

回答

5

export在執行shell的環境中放入一個變量,以便將其傳遞給腳本執行的進程,但不傳遞給調用腳本或任何其他進程的進程。嘗試執行

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

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

看到export效果。

爲了得到變量從1.sh2.sh,無論是從1.sh打電話2.sh,或導入1.sh2.sh

#!/bin/sh 
. ./1.sh 
echo $variable 
59

如果您要執行類似sh 1.sh./1.sh那麼你的文件,你在輔助執行它-貝殼。

如果你想在當前shell中所做的更改,你可以這樣做:

. 1.sh 
# OR 
source 1.sh 

請考慮通過reference-documentation去。

「當一個腳本使用運行source [或.]它運行在現有外殼內,由腳本創建或修改任何變量將腳本完成之後仍然可用。相反如果腳本只是運行作爲filename ,那麼將生成一個單獨的子shell(具有完全獨立的一組變量)來運行該腳本。「

+0

OP正在使用'/ bin/sh',它在很多平臺上都是最小的POSIX shell,並且不會支持'source'命令。 –

+0

嗯..我提到過關於'.'和'space'。我已經提到'源',因爲這是我看到人們現在使用的。 – linuxeasy

+0

1.sh:3:source:not found :( 我不希望我的1.sh從2.sh執行,我想先運行1.sh,關閉後運行2.sh ..和訪問第一個從第二個變量... 感謝您的答案 – Xander