重複の可能性:
分離した画面にテキスト入力を送信する
注質問への回答: 外部からスクリーンセッションに入力を送信する
screen
コマンドを生成し、実行したいstuff
シェルにそのコマンド(私の場合はUNIXコマンド)を入力するスクリプトを作成しようとしています。
これが私が今まで持っているものです:
$ screen -dmS new_screen bash
$ screen -S new_screen -X stuff "cd /some/path/
some_script_file.sh
" <--This new line is required to execute the above command.
$ # Note: See comments. We could insert the newline character instead of 'hard-coding' a newline string literal.
何らかの理由で画面がうまく作成され、bash
シェルに入ります。ただし、cd
コマンドsome_script_file.sh
は画面上のbashシェルを埋めません。
今本当に奇妙な部分は...画面から抜け出して下のstuffコマンドを再実行することです...
$ screen -S new_screen -X stuff "cd /some/path/
some_script_file.sh
"
その後、new_screenをもう一度追加してください。これで、画面内の bash シェルでコマンドが正しく入力され実行されることがわかります。
ここで私が間違っているのはわかりませんが、まだ接続されていない画面にコマンドを入力するのに問題がないようです。
答え1
最初の画面セッションを作成すると、ウィンドウは選択されません。したがって、コマンドを送信すると、画面はコマンドを送信するウィンドウを知りません。しかし、画面に接続するとウィンドウが選択されるので、これを行った後にコマンドを送信できます。コマンドラインからウィンドウを選択するには、このオプションを使用する必要があります-p
。
機能する必要があるコマンドの修正は次のとおりです。
screen -S new_screen -p 0 -X stuff "cd /some/path/
some_script_file.sh
"
答え2
@vgoff:「だから文字列としてリテラルを返します。パイプで使用できますか?それでも最後の文字で返す必要がありますか? - vgoff」
戻りリテラルまたは戻り文字 (^M) を使用して表示:
bash-3.00$ echo "(1) This sentence
> (2) has
> (3) 3 returns
> (4) in it.
> " | grep "has";
(2) has
リテラルを返してもパイプには影響しないようです。実行のためにechoステートメントを送信するには、引用符を終了する前にRETURNキーで返す必要があります。