我需要检查脚本是否从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
但我不确定这是解决您要解决的任何问题的最佳方法。