2013-03-22 112 views
0

我需要检查脚本是否从bashcsh运行。如何检查正在运行的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 
+1

呃,哈希爆炸顶部应意味着它总是在csh运行。你如何调用脚本? – 2013-03-22 14:50:34

+0

不,一些csh脚本我不能简单地运行它,起初我需要在bash中运行csh,然后输入脚本 – Ashot 2013-03-22 14:52:25

+1

如果有人试图用不同的,不兼容的shell运行'csh'脚本,我会说这是他们的问题,而不是你的脚本。 – chepner 2013-03-22 14:52:28

回答

1

你似乎缺少一个then。尝试这个。

#!/bin/csh 

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

虽然好像评论者是正确的,因为hashbang会强制csh。

+0

我添加了'然后',但我从bash运行脚本时遇到了同样的错误 – Ashot 2013-03-22 15:09:05

+0

我正在从zsh和bash运行它,它正在为我工​​作。我也改变了'$ SHELL'部分。你是否复制我的代码? – mraaroncruz 2013-03-22 15:17:58

+0

我复制了你的代码,并且在从bash运行脚本 – Ashot 2013-03-22 15:39:11

0

此行应该工作在几乎所有的壳

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

,但我不知道这是解决这个问题是什么问题,你正在试图解决的最好办法。

2

如果您想使用在bashtcsh中运行的语法,那么您会受到很多限制。实际上,我的tcsh甚至似乎没有设置SHELL,这可能是您为什么认为自己仍在bash的原因 - 如果我从bash启动tcshSHELL仍然为/bin/bash。也就是说,如果你真的需要检查,这样的事情可以工作(警告:Linux特有):

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

这个工作在两个炮弹。另外请注意,由于csh由与tcsh相同的二进制数(至少对我来说是这样)提供,所以这将检查tcshcsh

+0

+1时获得了相同的错误,以获得创造性解决方案 – Sorin 2013-03-22 15:05:08

+0

当我将此行添加到脚本并从bash运行它时,脚本退出并且控制台窗口关闭:) – Ashot 2013-03-22 15:54:19

+0

@Ashol:那么现在就会教他们使用错误的shell! ;)听起来你正在采购这个脚本。在这种情况下,尝试将'exit'改为'return'。 – FatalError 2013-03-22 16:03:36

5

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

echo $0 

/bin/bash 

csh 
相关问题