リモートサーバーには複数の画面が開いており、各画面を異なる目的に使用します。たとえば、IDが「build」の画面は、特定のプログラムをコンパイルするために使用されます。以下を使用していつでもこの画面を開くことができます。
ssh myserver -t screen -r build
しかし、ホストコンピュータから直接リモート画面のコマンドを実行したいと思います。たとえば、ls
リモート画面でタスクを実行したいと思いますbuild
。私は同様のことを試しました:
ssh myserver -t screen -r build -X ls .
しかし幸運はありません。
どんなアイデアがありますか?可能ですか?
ありがとうございます!
編集:私の実際のユースケース:
./buildSomethingOnRemoteScreen() && ./fetchTheBuiltOutputAndDoSomethingWithIt()
答え1
貼り付けコマンドを使用してすべてのスクリプトを実行できます。
# read script into register p
ssh hostname screen -S build -X readreg p script_on_the_host
# paste contents of register p into running screen session
ssh hostname screen -S build -X paste p
答え2
私はサーバー上でtmuxを使用しており(画面よりも柔軟です)、接続後に直接コマンドを実行します。
ssh myserver -t 'tmux send-keys -t session-name "ls ./" C-m; tmux attach -t session-name '
そのセッション名で実行されているセッションがあることを確認するだけです。 「ls ./」と入力すると、CmはENTERをシミュレートします。
答え3
リモート画面でコマンドを実行する例:
ssh myserver -t screen -S build -X stuff "ls .\n"
-X
オプションは画面固有のコマンドを渡します。これらのコマンドの1つは、stuff
単に与えられた文字列をウィンドウの入力バッファに入れます(埋めます)。改行文字を省略すると、コマンドは入力されません(Enterキーを押すのを忘れたのと同じ)。シリアル端末では、\r
コマンドの代わりにコマンドを入力する必要があります。\n
使用時に複数回実行される場合は、-X
セッション名を指定する必要があります。-S
を使用すると、事前に-X
選択されたウィンドウを使用できます-p
。それ以外の場合はアクティブを使用します。
コマンドがファイルに保存されている場合、またはシリアル端末が遅くて効果が必要な場合は、readreg
コマンドregister
を使用できます。paste
slowpaste