cplane_pid=`pidof hnb_gw.exe`
if [ -z $cplane_pid ]
then
STATUS=`failure`
echo "Cplane hnbgw running $STATUS"
else
STATUS=`success`
echo "Cplane hnbgw running $STATUS"
fi
echo
回答
如果存在的hnb_gw.exe
多個實例,會的pidof返回多個的PID。 [
的-z
預計只有一個PID。一種解決方案可能是使用pidof的-s
開關僅返回一個pid。
實際上,當它另一方面返回none時,會有兩個參數('-z'只是檢查參數是否爲空)。更多的引號似乎是更好的解決方案 –
你說得對,引號是好的,但這不是問題的原因。 – urzeit
嗯,是的。 '-z'不期望只有一個pid。它期待一個空的或非空的論點。因此,只有一個pid不是想要的。準確地獲取一個字符串並且需要引號。 –
pidof可以返回多個pid,在這些情況下,您的測試會得到太多的參數。
您需要Use More Quotes™:
if [ -z "$cplane_pid" ]
添加set -x
之前和set +x
該命令會顯示你以後是什麼導致,例如:
$ cplane_pid="1 2 3"
$ set -x
$ [ -z $cplane_pid ]
+ '[' -z 1 2 3 ']'
bash: [: too many arguments
換句話說,每個的變量中用空格分隔的值被用作單個參數。由於-z
只需要一個參數,因此會導致語法錯誤。
而不是保存這是一個變量,你可以簡單地做
if ! pidof hnb_gw.exe > /dev/null
如果進程不存在,則返回1(「假」)。
當你執行
cplane_pid=`pidof hnb_gw.exe`
然後cplane_pid
可以包含多個(用空格隔開)項目。
所以在
if [ -z $cplane_pid ]
擴張將成爲
if [ -z firstPid secondPid etc ]
,這是你的錯誤"[: too many arguments"
你可以用引用變量解決這個問題(你應該在外殼做到這一點ALWAYS )
if [ -z "$cplane_pid" ]
或使用[[
(如果它安裝在您的系統上),這在很多方面都更好。舉例來說,你不需要引用變量:)
if [[ -z $cplane_pid ]]
相同
if [[ -z "$cplane_pid" ]]
出於測試目的(而像這樣的錯誤回報)使用-x hasbang bash的選項
#!/bin/bash -x
或使用調試部分
-- normal code --
set -x # debug section starts here
[ -z $cplane_pid ] && echo zero
eval something
set +x # debug section ends here
-- normal code --
你也可以調用腳本
/bin/bash -x yourScript.sh
'sh:2:[[:找不到'(好吧,在cygwin中'/ bin/sh'總是bash,所以會起作用;大多數unices不是這樣) –
Tha's why why we more more solutions :) jinak zdravim,洪佐:) – bartimar
- 1. 輸出參數太多
- 2. 爲什麼TypeError偶爾出現?
- 3. NSMutableURLRequest偶爾出現「無邊界」錯誤
- 4. 調用WebServices時偶爾出現錯誤
- 5. 參數太多
- 6. 太多參數
- 7. 太多的參數'
- 8. datetick太多的輸出參數
- 9. 太多的輸出參數錯誤:MATLAB
- 10. fzero:太多的輸出參數
- 11. GWT RequestFactory偶爾非法參數異常
- 12. TwitterKit偶爾現有用戶
- 13. 查詢中出現以下$參數錯誤太多
- 14. 將列表轉換爲數組反覆出現偶爾下降
- 15. Matlab Fmincon「太多輸出參數」
- 16. 參數太多阻止呼叫科爾多瓦
- 17. SignTool.exe偶爾退出碼1
- 18. Activity.startLockTask()偶爾會拋出IllegalArgumentException
- 19. dumpdata,參數太多?
- 20. 太多的參數,函數指針中的參數太少
- 21. 哈斯克爾錯誤:地圖應用到的參數太多
- 22. 指定的參數太多
- 23. grep的參數太多?
- 24. Shell:太多的參數用'!'
- 25. 格式的參數太多
- 26. malloc的參數太多
- 27. 功能太多的參數
- 28. vb.net lambda太多的參數
- 29. 「新」:太多的參數
- 30. -bash:[:太多的參數
考慮重構,以便在if塊中設置$ STATUS,並且echo之後。 – icedwater