すでに実行中の画面セッションにコマンドを送信します


11

opensolarisで実行中のgnuスクリーンセッション(4.00.03)にコマンドを送信しようとしていますが、次のいずれかの組み合わせでコマンドを実行できません。 screen -X

OK、私はでスクリーンセッションを開始し、に再接続する日付を表示screen -S testしようと試みscreen -r -X "date"ました。ただし、エラーメッセージも画面への出力も行われませんでした。覚えられないほど多くの組み合わせで試してみました。

それを達成する方法に関するヒントはありますか?

これを行う理由は、デーモンとして提供されないプログラムがあり、それをスクリーンセッションで開始したいので、後で何が起こっているのかを確認できるからです。


1
まるで彼らがマニュアルページで話しているこの「コマンド」は、スクリーンセッション自体の設定のようなスクリーンコマンドを意味しているようです。スクリーンセッションで開かれるシェルのコマンドを送信するのではなく。だから、誰でもそれをbashスクリプトで実現する方法のアイデアはありますか?

@Axon:はい、-Xはシェルコマンドではなく画面コマンドを送信しますが、画面には新しい画面ウィンドウを開くことができるコマンド 'screen'があります。

回答:


18

実際、それは非常に簡単です。次のものを使用できます。

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015'Enterキーを押すことをエミュレートします。

注:その「もの」は画面コマンドです。 http://www.gnu.org/software/screen/manual/screen.html#Stuff


「もの」が何を表すかを指定していただけませんか?それは名前...またはコマンド...または他のパラメータですか?
セリン2012

実際には機能しますが、とにかく単純だとは言えません;)これは、キーが押されたイベントを渡し、改行を画面に渡すようなものです。通常の画面実行コマンドだけではないですか...?
ducin 2013

@Cecin:stuff文字列をstdinに「詰め込む」ための画面コマンド
konrad

これは非常に優れていますが、何らかの理由で「screen -RdS sessionname -X stuff 'ls -l' echo -ne '\015'」では機能しません。なぜですか?
e271p314 2014

これは、コマンドを2回実行しない限り機能しません。別のコマンドラインで実行してscreen -d -m -S sessionname; screen -S sessionname -X [...]も、何も実行しないと(screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...]、何もしない新しいスクリーンセッションを作成する以外は何も機能しません。反対票
user3338098

5

あなたが望むように聞こえます:

$ screen -S test -d -m -c / dev / null-sh -c 'date; exec $ SHELL '

-S test:このセッションに名前を付けます
-d -m:デタッチされた開始画面
-c / dev / null:〜/ .screenrcを無視します(別のファイルを指定するか、このオプションをドロップします。
  必要に応じて)
-:画面終了オプション
sh -c 'date; exec $ SHELL ':実行する画面のコマンド、このコマンドの場合
  単に「日付」だった場合、画面はすぐに終了します。終了したくない場合
  コマンドが終了した後に画面を表示する場合は、次のコマンドを使用できます。
    $ screen -S test -d -m -c / dev / null-ここでのコマンド

または、おそらくdtachが必要なだけかもしれません。


これを実行しても何も起こりません。成功またはエラーメッセージはありませんscreen -listが、開いているセッションはありません。
セリン2012

この答えは私にとってうまくいきました。重要なのは-画面オプションを終了するための-でした。
Plazgoth、2016

1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

session_nameという名前の既存のセッションで新しいウィンドウ(タイトルtitle付き)を開き、shell_command(オプションの引数args付き)を実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.