2013-03-22 74 views
0

我需要檢查腳本是否從bashcsh運行。如何檢查正在運行的shell?

#!/bin/csh 

if (`echo $SHELL` != '/bin/tcsh') 
    echo 'Please run it in csh' 
    exit 
endif 

這段代碼是給

bash: g.csh: line 7: syntax error: unexpected end of file 
+1

呃,哈希爆炸頂部應意味着它總是在csh運行。你如何調用腳本? – 2013-03-22 14:50:34

+0

不,一些csh腳本我不能簡單地運行它,起初我需要在bash中運行csh,然後輸入腳本 – Ashot 2013-03-22 14:52:25

+1

如果有人試圖用不同的,不兼容的shell運行'csh'腳本,我會說這是他們的問題,而不是你的腳本。 – chepner 2013-03-22 14:52:28

回答

1

你似乎缺少一個then。嘗試這個。

#!/bin/csh 

if ("$SHELL" != '/bin/tcsh') then 
    echo 'Please run it in csh' 
    exit 
endif 

雖然好像評論者是正確的,因爲hashbang會強制csh。

+0

我添加了'然後',但我從bash運行腳本時遇到了同樣的錯誤 – Ashot 2013-03-22 15:09:05

+0

我正在從zsh和bash運行它,它正在爲我工​​作。我也改變了'$ SHELL'部分。你是否複製我的代碼? – mraaroncruz 2013-03-22 15:17:58

+0

我複製了你的代碼,並且在從bash運行腳本 – Ashot 2013-03-22 15:39:11

0

此行應該工作在幾乎所有的殼

sh -c "[ \"$SHELL\" = \"tcsh\" ] || { echo \"Please run in tcsh\"; exit 1; }" || exit 

,但我不知道這是解決這個問題是什麼問題,你正在試圖解決的最好辦法。

2

如果您想使用在bashtcsh中運行的語法,那麼您會受到很多限制。實際上,我的tcsh甚至似乎沒有設置SHELL,這可能是您爲什麼認爲自己仍在bash的原因 - 如果我從bash啓動tcshSHELL仍然爲/bin/bash。也就是說,如果你真的需要檢查,這樣的事情可以工作(警告:Linux特有):

test `readlink /proc/$$/exe` != `which tcsh` && echo you must use tcsh && exit 1 

這個工作在兩個炮彈。另外請注意,由於csh由與tcsh相同的二進制數(至少對我來說是這樣)提供,所以這將檢查tcshcsh

+0

+1時獲得了相同的錯誤,以獲得創造性解決方案 – Sorin 2013-03-22 15:05:08

+0

當我將此行添加到腳本並從bash運行它時,腳本退出並且控制檯窗口關閉:) – Ashot 2013-03-22 15:54:19

+0

@Ashol:那麼現在就會教他們使用錯誤的shell! ;)聽起來你正在採購這個腳本。在這種情況下,嘗試將'exit'改爲'return'。 – FatalError 2013-03-22 16:03:36

5

檢查變量$ 0(正在執行的文件/ shell的名稱)。 下bash或csh的嘗試

echo $0 

/bin/bash 

csh