screenを実行し、他のコマンドを即座に実行する

screenを実行し、他のコマンドを即座に実行する

画面セッションを開始する方法と、人の介入なしに接続された画面セッションでコマンドを実行する方法はわかりません。予想される動作は次のとおりです。

[me@me ~]# screen -S name -L --mystery_flag 'hostname;echo yes;echo no'
#new screen session
[me@me ~]# hostname
me
[me@me ~]# echo yes
yes
[me@me ~]# echo no
no
[me@me ~]#

画面の別々のセッションにコマンドを送信したり、そのようなコマンドを送信した後に画面セッションを閉じる方法だけが見つかりましたscreen -S name "command"。対話型スクリプトの実行に使用されるので、セッションを開いたままにしたいと思います。

答え1

GNUは、screenさまざまなオプションとスクリーンセッション内で実行されるオプションのコマンドを使用します。コマンドが提供されない場合、screenセッションには対話型シェルセッションが含まれます。screenコマンドラインで指定されたコマンドであっても実行されたシェルであっても、実行中であったコマンドが終了するscreenと、セッションは終了します。

2つの質問があります。

  1. 複数のコマンドを実行したい。
  2. セッションは最終的に終了せず、インタラクティブシェルセッションに残りたいですscreen

screen最初の問題を解決するには、開始コマンドを次のように設定します。

sh -c 'hostname; echo yes; echo no'

これはインラインスクリプトを起動する単一のコマンドですsh -c。このスクリプトはコマンドを実行します。実行中のスクリプトに必要な場合(例ではありません)、代わりに使用できますbash -csh -cbash

2番目の問題を解決するには、スクリプトが実行するコマンドのリストの最後のステップとしてインタラクティブシェルを起動することを検討してくださいsh -c

sh -c 'hostname; echo yes; echo no; exec bash -i'

exec bash -i対話型シェルセッションを開始しますbash(これexecを行うと、変えるシェルsh -c)。

セッションで次のコマンドを実行しますscreen

screen sh -c 'hostname; echo yes; echo no; exec bash -i'

シェルセッションが終了すると、GNUはscreen終了しますbash -i

関連情報