如何检查正在运行的shell?

时间:2013-03-22 14:47:48

标签: bash shell csh

我需要检查脚本是否从bashcsh运行。

#!/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

4 个答案:

答案 0 :(得分:5)

检查变量$ 0(执行中的文件/ shell的名称)。 尝试

echo $0
在bash或csh下给出

/bin/bash

csh

答案 1 :(得分:2)

如果您想使用同时在bashtcsh中运行的语法,那么您受到的限制非常有限。事实上,我的tcsh似乎甚至没有设置SHELL,这可能是您认为自己仍在bash的原因 - 如果我从tcsh启动bash {1}},SHELL仍为/bin/bash。也就是说,如果你真的需要检查,这样的事情可以起作用(警告:特定于linux):

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

这适用于两种shell。另请注意,由于csh由与tcsh相同的二进制文件提供(至少对我来说是这样),因此会检查tcsh csh

答案 2 :(得分:1)

您似乎错过了then。试试这个。

#!/bin/csh

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

虽然评论者看起来是正确的,因为hashbang会强制使用csh。

答案 3 :(得分:0)

这一行几乎可以在任何shell中使用

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

但我不确定这是解决你试图解决的任何问题的最佳方法。