我需要检查脚本是否从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(正在执行的文件/shell 的名称)。试
echo $0
在 bash 或 csh 下给出
/bin/bash
或者
csh
如果您想使用在bash和中运行的语法,您会受到很大限制tcsh。事实上, mytcsh甚至似乎都没有设置SHELL,这可能就是为什么你认为你还在bash- 如果我tcsh从启动bash,SHELL仍然是/bin/bash。也就是说,如果你真的需要检查,这样的事情可能会起作用(警告:linux-specific):
test `readlink /proc/$$/exe` != `which tcsh` && echo you must use tcsh && exit 1
这在两个 shell 中都有效。另请注意,由于csh由相同的二进制文件提供tcsh(至少对我来说是这样),这将检查tcsh or 或 csh.
您似乎缺少一个then. 尝试这个。
#!/bin/csh
if ( "$SHELL" != '/bin/tcsh' ) then
echo 'Please run it in csh'
exit
endif
尽管评论者似乎是正确的,因为 hashbang 将强制 csh。
这条线几乎可以在任何外壳中使用
sh -c "[ \"$SHELL\" = \"tcsh\" ] || { echo \"Please run in tcsh\"; exit 1; }" || exit
但我不确定这是解决您要解决的任何问题的最佳方法。