程式語言
1753844 會員
7898 線上
108806 解決方案
發表新文章

which "CMD" 執行後的狀態為何都為0?

 
watermelonyu
教授

which "CMD" 執行後的狀態為何都為0?

shell 的變數 $? 理論上應該回應出上次指令執行的狀態



例如

unixt:/#ls aaa

aaa not found

unix:/#echo $?

2



可是

unixt08e:/#which aaa

no aaa in /usr/sbin /usr/bin ...(略)

unixt08e:/#echo $?

0

這是我用法不對還是...?這樣要怎麼判別狀態啊?該不會我一個script 就只能在一台使用?每次都要自己修改?
5則回覆 5
watermelonyu
教授

which "CMD" 執行後的狀態為何都為0?

關於指令對於return code的定義, 妳可以參考"man CMD"

大部分都在中下段, 會告訴你0, 1, 2 or 0, <>0代表什麼.



在unix shell中, 不見得a方法回覆出來的結果符合你的需要,但是你可以試著用b方法得到你要的答案. 加油囉.

watermelonyu
教授

which &quot;CMD&quot; 執行後的狀態為何都為0?

不好意思,可能我沒說清楚~



我的意思是,基本上$?是回應上次指令的終止碼,這應該大

"which 正確指令" 或是 "which 錯誤指令"



理論上,兩個指令的終止碼應該是不同才對,因為後者是「錯誤結束」,所以前者echo $? 是顯示 0,後者 echo $? 應該是顯示 1 才對。

(其實不光是 which,whereis、find 也是一樣,無論如何 $? 都是出現0,如果再透過 grep 抓取結果,才會出現 1)



HP-UX 這方面的判斷支援該不會比廉價的 FreeBSD、Linux 還不準確吧?



當然是可以用其他寫法,可是這樣的解決方式似乎有點消極?
watermelonyu
教授

which &quot;CMD&quot; 執行後的狀態為何都為0?

Hi,

這是which指令的缺陷

如果你仔細研究,其實which是一支CSH script

return value顯示0是代表這支script執行完畢,不是找到檔案

不只是HP-UX,SUN也有相同的問題

但是在Linux這個指令已經補強了
watermelonyu
教授

which &quot;CMD&quot; 執行後的狀態為何都為0?

感謝噢~

我想說他是 binary 檔,所以沒有看過~



請問...如果這樣的話,那我們能去對他做修改還是...這樣會影響保固嗎?



像 whereis 他是 binary 檔案,那有沒有什麼建議的方式修正呢?
watermelonyu
教授

which &quot;CMD&quot; 執行後的狀態為何都為0?

Hi,

我想HP不會建議user修改任何/usr/bin下的程式

可是我們可以改寫成一支新的且符合自己需求的程式



若是現有的指令不敷使用時,我會建議另外寫適合的程式來取代



Hope it helps