2012-04-13 83 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" 

:=部分受讓人文本如果變量爲空或未設置。 :命令除了允許參數擴展或參數外,什麼也不做。