我需要检查脚本是否从bash
或csh
运行。
#!/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
答案 0 :(得分:5)
检查变量$ 0(执行中的文件/ shell的名称)。 尝试
echo $0
在bash或csh下给出
/bin/bash
或
csh
答案 1 :(得分:2)
如果您想使用同时在bash
和tcsh
中运行的语法,那么您受到的限制非常有限。事实上,我的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
但我不确定这是解决你试图解决的任何问题的最佳方法。