SSH経由でGNU画面を実行すると、シェルはログインシェルではありませんか?

SSH経由でGNU画面を実行すると、シェルはログインシェルではありませんか?

長期実行プロセスなどを実行するために、SSH経由でアクセスされるリモートシステムでscreen(問題のある名前のターミナルセッションマネージャ)を使用しています。最後に、SSHを介して最初にログインしてから画面を起動するのではなく、コマンドを使用して画面セッションに直接接続し始めました。

ssh -t hostname screen -xRR

目的は、-xRR利用可能な場合は既存の画面セッションに接続し、そうでない場合は新しいセッションを作成することです。問題は、新しいセッションが作成されたときにログインシェルとして作成されないことです。

$ shopt -q login_shell; echo $?
1

したがって、.profileSSHを使用して最初にログインした後に実行するのと比較すると、ログインセッションの設定(実行と友達)が完了せず、設定の一部が失われます。screenこの場合、SSHが起動されたシェルはログインシェルであり、正しく設定されており、画面が継承された環境のようです。

「ログインモード」で文書化された画面フラグを試してみましたが、-l役に立ちませんでした。who

画面でログインシェルを実行する方法を知っていますか?

答え1

GNUのマニュアルページからscreen

-Sプログラム

$SHELLデフォルトのシェルを環境変数(/bin/shまたは定義されていない場合は "")の値ではなく、指定されたプログラムに設定します。これはshell、 ".screenrcコマンドを使用して定義することもできます。

...

シェル注文する

新しいシェルの作成に使用されるコマンドを設定します。これは環境変数の値を上書きします$SHELL。これは、ttyブースターを実行し、で指定されたプログラムが実行されることを期待する場合に便利です$SHELLコマンドが「-」文字で始まる場合、シェルはログインシェルで始まります。ログインシェルで始まらない場合、通常のシェルは最小限の初期化のみを実行します。たとえば、~/.bashrcBash はログインシェル以外では情報を読みません。

defshell現在の.screenrcコマンドの同義語ですshell

したがって、2つのオプションがあります。

  1. 次のコマンドを実行して、bashログインシェルで始まることを確認してください。

    ssh -t hostname screen -xRR -s -bash
    
  2. この動作をデフォルトに設定するには、$HOME/.screenrcターゲットホスト(またはscreenコマンドが実行される場所)のファイルに次の行を追加します。

    shell -bash
    

関連情報