我需要檢查腳本是否從bash
或csh
運行。如何檢查正在運行的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
我需要檢查腳本是否從bash
或csh
運行。如何檢查正在運行的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
你似乎缺少一個then
。嘗試這個。
#!/bin/csh
if ("$SHELL" != '/bin/tcsh') then
echo 'Please run it in csh'
exit
endif
雖然好像評論者是正確的,因爲hashbang會強制csh。
我添加了'然後',但我從bash運行腳本時遇到了同樣的錯誤 – Ashot 2013-03-22 15:09:05
我正在從zsh和bash運行它,它正在爲我工作。我也改變了'$ SHELL'部分。你是否複製我的代碼? – mraaroncruz 2013-03-22 15:17:58
我複製了你的代碼,並且在從bash運行腳本 – Ashot 2013-03-22 15:39:11
此行應該工作在幾乎所有的殼
sh -c "[ \"$SHELL\" = \"tcsh\" ] || { echo \"Please run in tcsh\"; exit 1; }" || exit
,但我不知道這是解決這個問題是什麼問題,你正在試圖解決的最好辦法。
如果您想使用在bash
和tcsh
中運行的語法,那麼您會受到很多限制。實際上,我的tcsh
甚至似乎沒有設置SHELL
,這可能是您爲什麼認爲自己仍在bash
的原因 - 如果我從bash
啓動tcsh
,SHELL
仍然爲/bin/bash
。也就是說,如果你真的需要檢查,這樣的事情可以工作(警告:Linux特有):
test `readlink /proc/$$/exe` != `which tcsh` && echo you must use tcsh && exit 1
這個工作在兩個炮彈。另外請注意,由於csh
由與tcsh
相同的二進制數(至少對我來說是這樣)提供,所以這將檢查tcsh
或csh
。
+1時獲得了相同的錯誤,以獲得創造性解決方案 – Sorin 2013-03-22 15:05:08
當我將此行添加到腳本並從bash運行它時,腳本退出並且控制檯窗口關閉:) – Ashot 2013-03-22 15:54:19
@Ashol:那麼現在就會教他們使用錯誤的shell! ;)聽起來你正在採購這個腳本。在這種情況下,嘗試將'exit'改爲'return'。 – FatalError 2013-03-22 16:03:36
檢查變量$ 0(正在執行的文件/ shell的名稱)。 下bash或csh的嘗試
echo $0
給
/bin/bash
或
csh
呃,哈希爆炸頂部應意味着它總是在csh運行。你如何調用腳本? – 2013-03-22 14:50:34
不,一些csh腳本我不能簡單地運行它,起初我需要在bash中運行csh,然後輸入腳本 – Ashot 2013-03-22 14:52:25
如果有人試圖用不同的,不兼容的shell運行'csh'腳本,我會說這是他們的問題,而不是你的腳本。 – chepner 2013-03-22 14:52:28