Command-Line

如何在保持第一個命令執行的同時防止鏈中的第二個命令?

  • April 7, 2021

昨天睡覺前開始了一個漫長的過程,我以為在我站起來之前就完成了,所以我用了

./command && sudo poweroff

我的系統配置為不要求輸入密碼sudo poweroff,因此該命令完成後應該關閉。

但是它仍在執行,我現在想將該系統用於其他任務。在後台執行該命令不是問題,但讓我的系統可能隨時關閉是問題。

有沒有辦法防止zsh執行poweroff命令,同時確保第一個命令執行直到它完成?

在這種情況下,編輯/etc/sudoers文件以便系統詢問我的密碼是否仍有幫助?

正如您在評論中澄清的那樣,它仍在互動式外殼的前台執行,您應該只需按下Ctrl+Z.

這將暫停./command工作。除非./command實際攔截到 SIGTSTP 信號並在那種情況下選擇 exit(0)(不太可能),否則退出狀態將為非 0(128+SIGTSTP,一般為 148),因此sudo poweroff不會執行。

然後,您可以使用或./command在前台或後台恢復。fg``bg

您可以使用以下方法進行測試:

sleep 10 && echo poweroff

並看到當您按下並稍後使用/恢復poweroff時不會輸出。Ctrl+Z``fg``bg

或與

sleep 10 || echo "failed: $?"

failed: 148在您按下 時立即查看Ctrl+Z

請注意,這適用於zsh並假設您使用./command && sudo poweroff. 它可能對其他 shell 無效,如果您以其他方式啟動它,例如(./command && sudo poweroff)在子 shell 中或{ ./command && sudo poweroff; }作為複合命令的一部分(zsh與大多數其他 shell 轉換為子 shell 不同,它可以恢復為暫停時為一個整體)。

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