detached 画面でプログラムを実行できることは知っていますが、既存の画面にログインし、現在実行中のプロセスを強制終了し、再起動してから切り離します。
Bashスクリプトでそれを行うことは可能ですか、たとえばctrl-A、ctrl-D、Ctrl-Cを送信するにはどうすればよいですか?
画面を削除する場合は、/var/run/screens/{user/
の画面名を削除して、screen -wipe
を実行することもできます。
しかし、画面には stuff とpaste
コマンドがあります:
コマンド:paste [registers [destination]]
(C-a ], C-a C-])
指定されたレジスタの(連結された)内容を現在のウィンドウの標準入力ストリームに書き込みます。レジスタ「。」はペーストバッファとして扱われます。パラメータが指定されていない場合、ユーザーは単一のレジスタを入力するよう求められます。ペーストバッファには、copy、history、readbufコマンドを入力できます。他のレジスタには、register、readreg、およびpasteコマンドを入力できます。 2番目の引数でpasteが呼び出された場合、指定されたレジスタの内容は、ウィンドウではなく名前付きの宛先レジスタに貼り付けられます。 「。」が2番目の引数として使用されている場合、ディスプレイの貼り付けバッファーが宛先です。貼り付けにはさまざまなリソースが使用されることに注意してください。通常、現在のウィンドウと現在のディスプレイの両方が必要です。ただし、2番目の引数が指定されている場合は、現在のウィンドウは必要ありません。ソース仕様にレジスターのみが含まれる場合(貼り付けバッファーではない)、レジスターはグローバルリソースであるため、現在のディスプレイ(接続された端末)は必要ありません。貼り付けバッファは、すべてのユーザーに対して1回存在します。
コマンド:stuff {string}
現在のウィンドウの入力バッファに文字列stringを詰め込みます。これはpasteコマンドに似ていますが、オーバーヘッドがはるかに少なくなります。 stuffコマンドで大きなバッファを貼り付けることはできません。キーバインディングに最も役立ちます。 Bindkey を参照してください。
だからこれは動作します:
screen -S session_name -X at window_number stuff ^C
screen -S session_name -X at window_number stuff ^X
また、control-cとcontrol-xをそれぞれ送信し、キーコードを組み合わせて使用することもできます(control a、dなど)
キーストロークをシミュレートする場合、きちんとしたスクリプト言語は「期待」です。
サンプルの期待スクリプトは次のようなものです。
spawn $env(Shell)
match_max 100000
send -- "screen\n"
expect eol
send -- "ls\n"
send -- "^Ad"
expect eof
これは次のコマンドで実行されます。
expect ./myscript