Bash

終端 Ctrl+s 與 Ctrl+z

  • March 29, 2018

例如,我有一個長時間執行且冗長tar cvf /backup/backup.tar的命令,該命令將大量文本輸出到螢幕*。我不一定想一直看到所有的輸出。我想停止文本輸出,做其他事情,然後回到它並“恢復”以查看它在備份過程中的進展情況。我希望它表現得像

/files/big_file_1
/files/big_file_2
/files/big_file_3
# Ctrl+s
# Do other stuff
# Ctrl+q , notice big jump in progress
/home/user/.bash_history
/home/user/small_file_1
/home/user/small_file_2
/home/user/small_file_3
...

Ctrl+s 停止輸出到螢幕(並且 Ctrl+q 恢復輸出到螢幕),而 Ctrl+z 暫停該過程,我回到 PS1 提示符。我的問題是,Ctrl+s 是否保持命令執行?

在上述tar命令中,我會突出顯示最後一個文件 TARred 讓它靜置幾分鐘,Ctrl+q,然後下一個文件似乎在同一個目錄中,或者至少在一個相對接近的目錄中。

*我在 Windows 上使用 Putty,所以如果它與 Linux/Unix 上的標準終端之間的行為不同,我深表歉意。

我的問題是,Ctrl+s 是否保持命令執行?

是的,直到系統緩衝區填滿,程序開始阻塞才能寫入終端。所以,它不會無限期地執行。另外,由於輸出被阻止,您將無法在同一終端中執行任何其他內容。

要退出該計劃,同時仍然可以返回,可以選擇:

  • 在旁邊執行另一個終端(另一個 Putty,另一個 SSH 連接)
  • 在同一終端內執行screentmux多路復用多個“視窗”
  • 將輸出重定向到文件,在後台執行命令,然後在需要時查看文件:tar cvf ... > /tmp/tar.out &tail /tmp/tar.out

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