0

我需要检查脚本是否从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
4

4 回答 4

6

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

echo $0

在 bash 或 csh 下给出

/bin/bash

或者

csh
于 2013-03-22T16:17:37.053 回答
2

如果您想使用在bash和中运行的语法,您会受到很大限制tcsh。事实上, mytcsh甚至似乎都没有设置SHELL,这可能就是为什么你认为你还在bash- 如果我tcsh从启动bashSHELL仍然是/bin/bash。也就是说,如果你真的需要检查,这样的事情可能会起作用(警告:linux-specific):

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

这在两个 shell 中都有效。另请注意,由于csh由相同的二进制文件提供tcsh(至少对我来说是这样),这将检查tcsh or 或 csh.

于 2013-03-22T15:03:42.107 回答
1

您似乎缺少一个then. 尝试这个。

#!/bin/csh

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

尽管评论者似乎是正确的,因为 hashbang 将强制 csh。

于 2013-03-22T14:59:26.577 回答
0

这条线几乎可以在任何外壳中使用

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

但我不确定这是解决您要解决的任何问题的最佳方法。

于 2013-03-22T15:03:09.343 回答