題 如何在bash中暫停bash


是否可以暫停由另一個bash調用的bash?例如,如果我使用 su 成為一個不同的用戶,但想暫時切換回我自己的用戶。再舉一個例子,在SSH會話中,我可以使用~hift(〜,^ Z)來掛起遠程shell並返回我的本地shell(但這顯然是SSH功能,而不是shell)。

bash攔截^ Z來做自己的進程控制,所以它必須是一個單獨的命令(如果它甚至支持)。但試圖找到它只會產生有關正常過程控制的信息。


4
2017-12-06 17:24


起源




答案:


Bash有一個 suspend 內置:

suspend: suspend [-f]
    Suspend shell execution.

    Suspend the execution of this shell until it receives a SIGCONT signal.
    Unless forced, login shells cannot be suspended.

    Options:
      -f    force the suspend, even if the shell is a login shell

    Exit Status:
    Returns success unless job control is not enabled or an error occurs.

5
2017-12-08 07:40



AHHA!這就是我在尋找的東西。 - Brian


試試:

kill -STOP $$

哪裡 $$ 是個 PID 當前的shell。

你可以綁定它 Alt鍵 + ž 例如通過添加到 ~/.inputrc

"\ez": "kill -STOP $$\n"

5
2017-12-06 17:28



非常好,謝謝!從來不知道.inputrc - Brian
它控制著方式 bash 讀取/編輯用戶輸入,請參閱 man readline,它可能非常有用,值得一提的是: history-search-backward 和 history-search-backward。 - cYrus


不完全是你要求的,但我通常使用 屏幕 當我做那樣的事情。但是,默認情況下不會在所有系統上安裝屏幕。


1
2017-12-07 23:00



我實際上一直在屏幕上工作。我在本地計算機上運行屏幕,並將SSH會話連接到其他一些計算機上。所以我通常不會在遠程系統上運行屏幕,因為屏幕內的屏幕很笨拙。我懶得開另一場會議:-)。當我需要運行一些命令時,我習慣在vim中按^ Z來暫停它(我知道vim有!但它與shell不同)。 - Brian