Bash
終止無限循環
我有一個命令,我想在每次它終止時自動再次執行,所以我執行了這樣的命令:
while [ 1 ]; do COMMAND; done;
但是如果我不能停止循環,
Ctrl-c
那隻會殺死COMMAND
而不是整個循環。我將如何實現類似但無需關閉終端就可以停止的事情?
檢查命令的退出狀態。如果命令被信號終止,則退出程式碼將為 128 + 信號編號。來自bash 的 GNU 線上文件:
出於 shell 的目的,以零退出狀態退出的命令已成功。非零退出狀態表示失敗。使用了這種看似違反直覺的方案,因此有一種明確定義的方式來指示成功,並且有多種方式來指示各種失敗模式。當命令在編號為 N 的致命信號上終止時,Bash 使用值 128+N 作為退出狀態。
POSIX 還指定由信號終止的命令的值大於 128,但似乎沒有像 GNU 那樣指定其確切值:
由於收到信號而終止的命令的退出狀態應報告為大於 128。
例如,如果您使用 control-C 中斷命令,則退出程式碼將為 130,因為 SIGINT 在 Unix 系統上是信號 2。所以:
while [ 1 ]; do COMMAND; test $? -gt 128 && break; done
ctrl
您可以在使用+執行時停止並將您的工作置於後台z
。然後你可以殺死你的工作:$ kill %1
在哪裡
$$ 1 $$是你的工作編號。