.bashrcに「screen -r」を入れるのは良い考えですか?


17

画面を使用して、サーバー上でsshセッションを維持したいと思います。ログイン時にユーザーの実行中のセッションを自動的に再開できると便利です。これを行う簡単な方法は、「screen -r」を.bashrcに追加することで、これはうまくいくようです。まだテストしていない条件でこれが何かを壊すかどうか疑問に思っています。ここでの経験があり、これが私がすべきかどうかを教えてくれる人はいますか?

回答:


20

screen -R -d既存のセッションが存在する場合は自動的に接続し、存在しない場合はセッションを作成する必要があります。

対話型シェルでのみこれを行うようにしてください。~/.bashrc親プロセスがrshdまたはsshdである場合、非対話型シェルの場合でもBashソース(これはドキュメントに記載されていますが、見落としがちです)。が$-含まれてiいるため、シェルがインタラクティブであることがわかります。

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

これにより、異なる端末で異なる画面セッションを簡単に実行できなくなります。

画面からデタッチし、親シェルを終了してログアウトする必要があります。これはのexec screen代わりに使用することで解決できますscreen

ログインシェル以外のシェルを起動すると、画面に表示されますが、これはほとんどの場合に必要なものではありません。私は少なくとも、これを対話型sshセッションで直接実行している場合に制限します~/.bash_profile

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

.bashrcシェルを終了させるエラーによりログインが困難になるため、複雑な操作を行う場合は注意してください。


私がお勧めするのは、サーバー上のシェル初期化ファイルを変更せず、代わりにクライアントから画面を明示的に実行することです。

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

(おそらく、クライアント上でシェルエイリアスまたはデスクトップ環境のショートカットを作成します。)そうすれば、画面を実行しない、別のセッション名を指定するなどを簡単に選択できます。


パーフェクト。マニュアルページにあるはずです。
マーカス

それは実行するために、SSHのためのより良いじゃないですscreen -D -Rか、でもscreen -D -RR
-niutech

2

Xサーバーの起動スクリプトは、多くの場合、新しいシェルを起動します。たとえば、「ユーザー定義セッション」を使用してgdmを使用してログインしている場合です。

終了しないものがあると、Xの起動がハングする可能性があると思います。それには含まれますscreen -r


Xサーバーの起動スクリプトは実行されません.bashrc。しかし、これが問題になる他の状況があります。たとえば、実行中ですssh host.example.com somecommand(奇妙なことに、bashは実行されます.bashrc)。
ジル 'SO-悪であるのをやめる'

「ユーザー定義セッション」を選択した場合、いくつかのディストリビューションにあります。Ubuntuでは、.profileを明示的に取得します。他のユーザーは、通常.bash_profileを意味するログインシェル内から.xsessionを呼び出し、ほとんどのユーザーは.bash_profile内から.bashrcを取得します。
ミケル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.