Bash 如何检查正在运行的shell?
我需要检查脚本是否从Bash 如何检查正在运行的shell?,bash,shell,csh,Bash,Shell,Csh,我需要检查脚本是否从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 您似乎缺少一个,然后。试试这个 #!/bin/csh if ( "$SHELL" != '/bin/tcsh' ) then
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
您似乎缺少一个
,然后。试试这个
#!/bin/csh
if ( "$SHELL" != '/bin/tcsh' ) then
echo 'Please run it in csh'
exit
endif
虽然注释者似乎是正确的,因为hashbang将强制csh。这行代码几乎适用于任何shell
sh -c "[ \"$SHELL\" = \"tcsh\" ] || { echo \"Please run in tcsh\"; exit 1; }" || exit
但我不确定这是否是解决您试图解决的任何问题的最佳方法。如果您想使用在bash
和tcsh
中运行的语法,您会受到很大限制。事实上,我的tcsh
甚至似乎没有设置SHELL
,这可能就是为什么你认为你仍然在bash
——如果我从bash
启动tcsh
,SHELL
仍然是/bin/bash
。也就是说,如果您真的需要检查,类似的方法可能会起作用(注意:linux特定):
这在两种壳中都有效。还要注意的是,由于csh
是由与tcsh
相同的二进制文件提供的(至少对我来说是这样),这将检查tcsh
或csh
检查变量$0(正在执行的文件/shell的名称)。
尝试
在bash或csh下给出
/bin/bash
或
顶部的hash bang应该意味着它总是在csh中运行。你是如何调用脚本的?不,我有一些csh脚本我不能简单地运行它,首先我需要在bash中运行csh,然后找到脚本的源代码如果有人试图用不同的、不兼容的shell运行你的csh
脚本,我会说这是他们的问题,不是你脚本的问题。$shell
是用户的登录shell,不是当前正在运行的shell。是时候指出,如果您正在为C shell编程脚本,第一个问题恰恰是:您使用了错误的shell。使用一个真正的贝壳,把贝壳留在C海岸。我也看到了。shebang行(应该与测试一致,但不一致)确保,如果有人像那样以普通命令的形式调用g.csh
,就会执行正确的shell。如果他们运行bash g.csh
,那么语法错误是适当的,不要为此烦恼;他们误用了这个命令。我添加了,然后添加了,但是在从bash运行脚本时,我得到了相同的错误。我从zsh和bash运行脚本,它对我有效。我还更改了$SHELL
部分。你复制了我的代码吗?我复制了你的代码,当我从bash运行脚本时,我得到了相同的错误当我将这一行添加到脚本并从bash运行它时,脚本退出,并且控制台窗口关闭:)@Ashol:好吧,现在这将教会他们使用错误的shell!;)听起来您正在寻找此脚本的来源。在这种情况下,请尝试将exit
更改为return
。
echo $0
/bin/bash
csh