長期実行プロセスなどを実行するために、SSH経由でアクセスされるリモートシステムでscreen(問題のある名前のターミナルセッションマネージャ)を使用しています。最後に、SSHを介して最初にログインしてから画面を起動するのではなく、コマンドを使用して画面セッションに直接接続し始めました。
ssh -t hostname screen -xRR
目的は、-xRR
利用可能な場合は既存の画面セッションに接続し、そうでない場合は新しいセッションを作成することです。問題は、新しいセッションが作成されたときにログインシェルとして作成されないことです。
$ shopt -q login_shell; echo $?
1
したがって、.profile
SSHを使用して最初にログインした後に実行するのと比較すると、ログインセッションの設定(実行と友達)が完了せず、設定の一部が失われます。screen
この場合、SSHが起動されたシェルはログインシェルであり、正しく設定されており、画面が継承された環境のようです。
「ログインモード」で文書化された画面フラグを試してみましたが、-l
役に立ちませんでした。who
。
画面でログインシェルを実行する方法を知っていますか?
答え1
GNUのマニュアルページからscreen
:
-Sプログラム
$SHELL
デフォルトのシェルを環境変数(/bin/sh
または定義されていない場合は "")の値ではなく、指定されたプログラムに設定します。これはshell
、 ".screenrcコマンドを使用して定義することもできます。
...
シェル注文する
新しいシェルの作成に使用されるコマンドを設定します。これは環境変数の値を上書きします
$SHELL
。これは、ttyブースターを実行し、で指定されたプログラムが実行されることを期待する場合に便利です$SHELL
。コマンドが「-」文字で始まる場合、シェルはログインシェルで始まります。ログインシェルで始まらない場合、通常のシェルは最小限の初期化のみを実行します。たとえば、~/.bashrc
Bash はログインシェル以外では情報を読みません。
defshell
現在の.screenrcコマンドの同義語ですshell
。
したがって、2つのオプションがあります。
次のコマンドを実行して、
bash
ログインシェルで始まることを確認してください。ssh -t hostname screen -xRR -s -bash
この動作をデフォルトに設定するには、
$HOME/.screenrc
ターゲットホスト(またはscreen
コマンドが実行される場所)のファイルに次の行を追加します。shell -bash