Bash
打破命令循環但退出程式碼不是原因?
我執行以下命令:
echo "while emacs;do echo $?;done;echo Exit code: $?;" | bash
如果我通過菜單或關閉按鈕退出 emacs,它會列印退出程式碼 0 並重新啟動。
如果我通過鍵入 (kill-emacs 1) ctrl-x ctrl-e 退出 emacs
Emacs 被殺死,循環也被殺死,但退出程式碼仍然是 0。
是什麼導致它跳出循環?
更新:根據 pqnet 的建議,我使用了單引號,現在程式碼如下:
echo 'while emacs;do echo Exit code: $?;done;echo "Exit code: $?";echo "Loop End."' | bash
這會產生相同的結果。我假設我需要在 while 循環中保存 pid 的值。所以我嘗試:
echo 'while epid=$(emacs);do echo Exit code: $epid;done;echo "Exit code: $epid";echo "Loop End."' | bash
如果要信任這些結果,那麼兩種情況下的退出程式碼都是空字元串(或不可見的二進製文件),但我認為這也不正確嗎?我對“返回值”作為退出程式碼的假設是不正確的,還是只是 Epid 沒有擷取它?
更新:其中一個答案解釋了為什麼我沒有得到預期的結果,但現在我很想知道什麼程式碼可以讓我查看 emacs 的退出程式碼,因為我想出的東西都沒有。
實時調頻:
儘管
該
while
命令的語法是:同時測試命令;執行後續命令;完畢
只要test-commands的退出狀態為零,就執行consequent-commands 。返回狀態是consequent-commands中執行的最後一個命令的退出狀態,如果沒有執行,則返回零。
如果要從test-commands獲取返回值,則需要將其顯式分配給另一個變數:
#!/bin/bash while emacs ret=$? ((ret == 0)) do echo "Exit code: $ret" done echo "Exit code: $ret" echo "Loop End."