將“screen -r”放入我的 .bashrc 中是個好主意嗎?

將“screen -r”放入我的 .bashrc 中是個好主意嗎?

我想使用 screen 來保持 ssh 會話在我的伺服器上保持活動狀態。如果我可以在登入時自動恢復使用者正在運行的會話,那就太好了。我只是想知道在我尚未測試的條件下這是否會破壞任何東西。這裡有經驗的人可以告訴我這是否是我應該做的?

答案1

您需要screen -R -d自動附加到現有會話(如果存在),否則建立會話。

確保你僅在互動式 shell 上執行此操作。當其父進程是 rshd 或 sshd 時, Bash 來源~/.bashrc甚至適用於非互動式 shell(文件中提到了這一點,但很容易錯過)。您可以看出 shell 是互動的,因為$-包含i.

case $- in
  *i*) screen -Rd;;
esac

這不會輕易讓您在不同的終端機中執行不同的螢幕工作階段。

您需要從螢幕分離,然後退出父 shell 才能登出。這可以透過使用exec screen代替 來解決screen

如果您啟動登入 shell 以外的 shell,您將進入螢幕,這在大多數情況下不是您想要的。我至少會將此限制為當您直接在互動式 ssh 會話中運行時,在您的 中使用以下內容~/.bash_profile

case "/$(ps -p $PPID -o comm=)" in
  */sshd) screen -R -d;;
esac

當你用你的程式做複雜的事情時要小心.bashrc,因為一個錯誤會導致 shell 退出,從而導致登入變得困難。


我什麼推薦是不要修改伺服器上的 shell 初始化文件,而是從客戶端明確地執行 screen,如下所示

ssh -t host.example.com screen -R -d

(您可能會在用戶端上建立 shell 別名或桌面環境捷徑。)這樣您就可以輕鬆選擇不執行 screen、指定備用會話名稱等。

答案2

您的 X 伺服器啟動腳本通常會啟動一個新的 shell,例如,如果您使用「使用者定義的會話」使用 gdm 登入。

我認為任何不退出的事情都可能導致你的 X 啟動掛起。這將包括screen -r.

相關內容