Bash

如何在終端中停止循環 bash 腳本?

  • February 10, 2022

例如,

#!/bin/bash
while :
do
   sl
done

如何終止這個 bash 腳本?

該程序sl故意忽略SIGINT,這是您按下時發送的內容Ctrl+C。因此,首先,您需要通過添加參數來告訴sl不要忽略。SIGINT``-e

如果你嘗試這個,你會發現你可以阻止每個人sl,但他們仍然重複。您還需要告訴bash退出SIGINTtrap "exit" INT您可以通過在循環之前放置一個來做到這一點。

#!/bin/bash
trap "exit" INT
while :
do
   sl -e
done
  1. Ctrl-Z暫停腳本
  2. kill %%

%%告訴內置 bash你想向目前killshell 中最近掛起的後台作業發送信號(預設為 SIGTERM),而不是程序 ID。

您還可以按編號或名稱指定作業。例如,當您使用 ^Z 暫停作業時,bash 會告訴您其作業編號是什麼,例如[n]+ Stopped,其中n方括號內是作業編號。

有關作業控制和終止作業的更多資訊,請在 bash 中執行help jobshelp fghelp bghelp 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 %%工作相同)

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