差分

2011-04-13 24 views
2

CSH:差分

set a=0 
echo "a is $a" 

當我這樣做./my_script.csh輸出是:

a is 

當我這樣做源my_script.csh輸出是:

a is 0 

爲什麼會這樣。據我所知./執行使用新的外殼。

回答

1

如果檢查變量「a」在當前的shell設置:

set | grep '^a=' 

請記住,一旦你的源腳本,以當前的shell, 它所有的全局變量,直到取消設置或退出當前shell 。 您可能想要啓動一個新的shell,輸入腳本,結束exit shell以執行有效的測試。

我不知道您的問題的上下文,但您可能想要導出一些關鍵變量以在每個子進程中擁有其副本。

3

沒錯,./my_script.csh啓動一個新的shell,並使用#!你應該在文件的頂部選擇運行哪個shell(在這種情況下,應該是是csh)。

source my_script.csh在當前shell中運行腳本。

如果腳本在bash shell中運行不正確,set a = 0不是用於在bash中設置環境變量的語法,所以代碼將無法按預期工作,因爲您使用錯誤的外殼。

看看#!在文件的頂部。這是對的嗎?

+0

是的它的權利。 #!/ bin/csh解決了這個問題 – Coka 2011-04-13 07:45:39

+0

但是我沒有使用它,並且在兩種情況下都使用echo「$ SHELL」顯示/ bin/csh。爲什麼它如此 – Coka 2011-04-13 07:46:27

+0

我甚至不知道你可以有沒有#的Linux腳本!在頂部!今天我學到了一些新東西。但我不知道他們。 – 2011-04-13 07:49:33