我需要检查脚本是否从bash
或csh
运行。如何检查正在运行的shell?
#!/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
我需要检查脚本是否从bash
或csh
运行。如何检查正在运行的shell?
#!/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
你似乎缺少一个then
。尝试这个。
#!/bin/csh
if ("$SHELL" != '/bin/tcsh') then
echo 'Please run it in csh'
exit
endif
虽然好像评论者是正确的,因为hashbang会强制csh。
我添加了'然后',但我从bash运行脚本时遇到了同样的错误 – Ashot 2013-03-22 15:09:05
我正在从zsh和bash运行它,它正在为我工作。我也改变了'$ SHELL'部分。你是否复制我的代码? – mraaroncruz 2013-03-22 15:17:58
我复制了你的代码,并且在从bash运行脚本 – Ashot 2013-03-22 15:39:11
此行应该工作在几乎所有的壳
sh -c "[ \"$SHELL\" = \"tcsh\" ] || { echo \"Please run in tcsh\"; exit 1; }" || exit
,但我不知道这是解决这个问题是什么问题,你正在试图解决的最好办法。
如果您想使用在bash
和tcsh
中运行的语法,那么您会受到很多限制。实际上,我的tcsh
甚至似乎没有设置SHELL
,这可能是您为什么认为自己仍在bash
的原因 - 如果我从bash
启动tcsh
,SHELL
仍然为/bin/bash
。也就是说,如果你真的需要检查,这样的事情可以工作(警告:Linux特有):
test `readlink /proc/$$/exe` != `which tcsh` && echo you must use tcsh && exit 1
这个工作在两个炮弹。另外请注意,由于csh
由与tcsh
相同的二进制数(至少对我来说是这样)提供,所以这将检查tcsh
或csh
。
+1时获得了相同的错误,以获得创造性解决方案 – Sorin 2013-03-22 15:05:08
当我将此行添加到脚本并从bash运行它时,脚本退出并且控制台窗口关闭:) – Ashot 2013-03-22 15:54:19
@Ashol:那么现在就会教他们使用错误的shell! ;)听起来你正在采购这个脚本。在这种情况下,尝试将'exit'改为'return'。 – FatalError 2013-03-22 16:03:36
检查变量$ 0(正在执行的文件/ shell的名称)。 下bash或csh的尝试
echo $0
给
/bin/bash
或
csh
呃,哈希爆炸顶部应意味着它总是在csh运行。你如何调用脚本? – 2013-03-22 14:50:34
不,一些csh脚本我不能简单地运行它,起初我需要在bash中运行csh,然后输入脚本 – Ashot 2013-03-22 14:52:25
如果有人试图用不同的,不兼容的shell运行'csh'脚本,我会说这是他们的问题,而不是你的脚本。 – chepner 2013-03-22 14:52:28