Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何检查正在运行的shell?_Bash_Shell_Csh - Fatal编程技术网

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