2012-09-27 146 views
1

我面臨的情況是,在腳本中我必須執行更改shell並設置一些環境變量的只讀腳本。現在我需要從我的腳本訪問這些環境變量。在shell腳本中更改shell並執行命令

情況是這樣的腳本-A

#!/bin/csh -f 
bash 
#set some environment variables A,B,C 

我沒有寫腳本A存取和它執行了很多所必需的我的腳本-B的配置。

我試圖腳本-B與

#!/bin/csh -f 
./script-A 
echo $A 

然而,由於外殼已經改變,我無法訪問$ A。是否有一些工作可以做到這一點。

理想情況下,腳本-B中的命令必須在腳本-A的新環境中運行。在手動交互時,這很好,因爲我可以先執行腳本-A然後執行所需的命令。但是,我必須將整個過程自動化。

+1

這不能是實際的'script-A';就目前而言,它會給你一個等待訂單的交互式Bash。 –

+0

我似乎已經犯了一些錯誤abt腳本-A。因爲它目前也不起作用。但Q的哲學依然如此。有一個腳本可以更改shell並在該shell中進行一些配置(它保持交互式)。我需要在該shell中執行一些命令。 – neorg

+3

然後,您應該「源」另一個文件而不是執行它:'源腳本-A'。 –

回答

0

如果腳本-A是csh的腳本,然後

source script-A 

這個工程即使腳本-A包含退出聲明:

$ cat x.csh 
#!/bin/csh 

source y.csh 
echo $A - $B 

cat y.csh 
#!/bin/csh 

set A=10 
set B=20 
exit 1 
set B=30 

$ ./x.csh 
10 - 20 

如果腳本-A是在另一個shell,你需要重寫劇本-B以匹配外殼

哦,順便說一下,DITCH CSH如果可能的話:

+0

如果每個子進程執行相同的命令解釋程序,這將工作,但似乎並非如此。你不能從一個csh源發出一個bash腳本。 –

+0

但是他的腳本-A和腳本-B的頂部有#!/ bin/csh在他的問題中......即使腳本A在內部調用bash,這也不應該破壞源代碼。 – dan3

0

用您需要執行的shell語言重寫您自己的腳本,以便您可以使用shell的source命令執行它。