Command-Line
如何在保持第一個命令執行的同時防止鏈中的第二個命令?
昨天睡覺前開始了一個漫長的過程,我以為在我站起來之前就完成了,所以我用了
./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 不同,它可以恢復為暫停時為一個整體)。