Bash
如何在終端中停止循環 bash 腳本?
例如,
#!/bin/bash while : do sl done
如何終止這個 bash 腳本?
該程序
sl
故意忽略SIGINT
,這是您按下時發送的內容Ctrl+C
。因此,首先,您需要通過添加參數來告訴sl
不要忽略。SIGINT``-e
如果你嘗試這個,你會發現你可以阻止每個人
sl
,但他們仍然重複。您還需要告訴bash
退出SIGINT
。trap "exit" INT
您可以通過在循環之前放置一個來做到這一點。#!/bin/bash trap "exit" INT while : do sl -e done
- 按
Ctrl-Z
暫停腳本kill %%
%%
告訴內置 bash你想向目前kill
shell 中最近掛起的後台作業發送信號(預設為 SIGTERM),而不是程序 ID。您還可以按編號或名稱指定作業。例如,當您使用 ^Z 暫停作業時,bash 會告訴您其作業編號是什麼,例如
[n]+ Stopped
,其中n
方括號內是作業編號。有關作業控制和終止作業的更多資訊,請在 bash 中執行
help jobs
、help fg
、help bg
和help kill
,然後搜尋JOB CONTROL
(全部大寫)或jobspec
在 bash 手冊頁中。例如
$ ./killme.sh ./killme.sh:第 4 行:sl:找不到命令 ./killme.sh:第 4 行:sl:找不到命令 ./killme.sh:第 4 行:sl:找不到命令 ./killme.sh:第 4 行:sl:找不到命令 ./killme.sh:第 4 行:sl:找不到命令 ... ... ... ./killme.sh:第 4 行:sl:找不到命令 ^ Z [1]+ 已停止 ./killme.sh $殺死%% $ [1]+ 終止 ./killme.sh
在此範例中,作業的編號為 1,因此
kill %1
工作方式與kill %%
(注意:我沒有
sl
安裝,所以輸出只是“找不到命令”。在你的情況下,你會得到 sl 產生的任何輸出。這並不重要 -^Z
暫停並且kill %%
工作相同)