2012-04-13 81 views
0

我试图找到使用which命令通过在KSH的Shell脚本如何从解析

以下但如果守护程序不存在,它赋予了一个守护进程的路径做的ksh命令的if-else操作在格式警告..

no DaemonName .....bla bla bla

但因为我不能直接显示的是,我现在做这个

tmp=`which daemonName` 
tmp2=`which daemonName | grep "no DaemonName"` 
if [[ "$tmp2" != "" ]] 
tmp=wrong name 

如何我可以在简单的单行中做同样的事吗?

我真正想要的是,如果守护进程不存在,它应该给出一个默认字符串,如果存在的话,它应该给出which命令输出。

回答

1

这将设置TMP变量:

tmp=$(which daemonName) || tmp="wrong name" 

编辑:一个与这个建议的问题是which命令的行为不规范,如AIX奇实现演示。

当您使用ksh,一个简单的解决方法是由whence内置替代的which命令:

tmp=$(whence -f daemonName) || tmp="wrong name" 
+0

我会说你的哪个命令坏了。请告诉操作系统,您使用的“ksh”和“哪些”版本。 – jlliagre 2012-04-13 14:04:55

+0

操作系统是AIX 6.2:P就是我所知道的:D – footy 2012-04-13 18:12:48

+0

答复已更新,以供我与AIX协同工作。 – jlliagre 2012-04-14 09:19:02

0

which不报告错误在我的分布,但是这可能会为你工作:

tmp=`which daemonName 2> /dev/null` 
... 

基本上,你只是扔掉出现的任何错误消息。像你想它

+0

但是,这会给我一个空白的tmp变量 – footy 2012-04-13 18:14:03

0

这样做:

tmp=$(which dawmonName 2>/dev/null) 
: ${tmp:=wrong name} 
echo "$tmp" 

:=部分受让人文本如果变量为空或未设置。 :命令除了允许参数扩展或参数外,什么也不做。