Bash

終止無限循環

  • January 7, 2022

我有一個命令,我想在每次它終止時自動再次執行,所以我執行了這樣的命令:

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 $$是你的工作編號。

引用自:https://unix.stackexchange.com/questions/42287