2014-10-27 93 views
0

我刚开始学习如何创建bash脚本。在bash中是否有命令检查程序是否可以运行

我想知道是否有方法来测试程序是否可以运行。例如,我想测试NCL是否运行。

如果我写了一个终端上NCL我得到

xxx$ ncl 
dyld: Library not loaded: /usr/local/lib/libgomp.1.dylib 
    Referenced from: /usr/local/ncl-6.2.1/bin/ncl 
    Reason: image not found 
Trace/BPT trap: 5 

这意味着,NCL已经安装,但程序不能由于缺乏图书馆的运行。

我想知道是否有一个命令在bash中给我1或0,取决于如果NCL(或其他程序)运行或不运行。

+2

在这种情况下,'ncl'命令运行,但失败。事实上,由于缺少库而不是其他一些错误,这可能不是bash能够可靠检测到的。 – 2014-10-27 20:59:54

+0

如果您具体谈论缺少的依赖关系,请查看ldd。 – tolanj 2014-10-27 22:24:46

回答

0

你应该能够在这样的bash检查命令的返回值...

somecommand argument1 argument2 
RETVAL=$? 
[ $RETVAL -eq 0 ] && echo Success 
[ $RETVAL -ne 0 ] && echo Failure 
+0

@AJaramillo简洁地说,'somecommand argument1 argument2 && echo Success || echo failure“,或者,因为它在shell脚本中可能更有用,所以'somecommand argument1 argument2 ||如果命令无法运行或错误停止,则返回'以停止处理。 – gboffi 2014-10-30 16:24:38

0

这一切都依赖于NCL命令的返回码。试试ncl并在得到错误消息后输入echo $?并查看输出。该值为您提供以前输入的命令的返回码,在我们的例子中为ncl。如果该值不是0,则ncl无法运行。

0

谢谢你Matt和Subashini,你的回答帮了我很多。 这个问题很容易解决。 遵循你的建议,我创建了一个名为'ncltest.ncl'的ncl脚本文件,打开和关闭ncl只是为了检查。然后,检查的bash脚本是这样的:

ncl ncltest.ncl 
testfile=$? 
if [ $testfile -eq 0 ]; then 
echo 'It worked' 
else 
echo 'It did not work' 
fi 

NCL如果工作和其他数取决于问题的则返回0的情况。

相关问题