byobu画面セッションに接続してコマンドを実行しますか?


9

私が作成しているスクリプトでは、可能な限り自動化する方法を実験しています。より興味深い課題の1つは、byobu画面セッションに接続してコマンドを実行することです。

だから私は明白な場所から始めて、そこにあるスクリーンセッションの数を見ました(ゲームには3つのウィンドウがあり、ロードクォースターには2つあります。ユーザーは別々のパテインスタンスにいます)

game@quackgame:~$ screen -ls
There is a screen on:
        2019.byobu      (01/05/2011 05:10:04 PM)        (Attached)
1 Socket in /var/run/screen/S-game.

そこに一つだけなので、私はシステムをチェックしました

lordquackstar@quackgame:/home/game$ sudo ls -lAR /var/run/screen/
/var/run/screen/:
total 0
drwx------ 2 game          users         100 2011-01-06 09:18 S-game
drwx------ 2 lordquackstar lordquackstar 100 2011-01-06 09:17 S-lordquackstar

/var/run/screen/S-game:
total 4
prwx------ 1 game users 0 2011-01-08 07:55 2019.byobu
-rw------- 1 game users 0 2011-01-06 09:18 byobu-exchange
-rw-r--r-- 1 game users 3 2011-01-08 07:32 byobu.updates-available

/var/run/screen/S-lordquackstar:
total 4
prwx------ 1 lordquackstar lordquackstar 0 2011-01-08 07:42 1169.byobu
-rw------- 1 lordquackstar lordquackstar 0 2011-01-06 09:17 byobu-exchange
-rw-r--r-- 1 lordquackstar lordquackstar 3 2011-01-08 07:35 byobu.updates-available

まだ複数の画面はありません

だから私の質問のために:スクリプトからbyobuのウィンドウにどのように接続できますか?


少し関連する注意点として、bashスクリプトから接続した後、コマンドを送信してから切り離す方法はありますか?


各ユーザーが1つの画面セッションを持っているようです。屏風に詳しくないのですが、なぜ5つのスクリーンセッションがあると思いますか?
ジル 'SO-悪をやめる'

@Gillesさらなる調査により、各ユーザーのスクリーンセッションは1つだけであることが判明しました。私は、htop複数の画面処理を示して以来、どこにいるのかを考えました
TheLQ、2011年

回答:


7

ウィンドウを含む、以前に切り離されたbyobu/ screenセッションに直接接続できます。

byobu -r -p2

ウィンドウ2(または名前付きのウィンドウ)に再接続します。

-Xbyobu/ screenセッションに任意のコマンドを送信でき、-pスイッチでも機能します。

byobu -p2 -X stuff "uname -a $(echo -ne '\r')"

これuname -aにより、2番目(実際には3番目)のbyobuウィンドウにがecho送信され、最後にキャリッジリターンが送信されるため、コマンドが実行されます。


文字列の最後に改行を入れて詰め込むことができます。
ジル 'SO-邪悪なことをやめる'

「もの」は何ですか?これを削除すると、byobu "-X Unknown command 'uanme -a'でエラーが発生します
TheLQ

それはそれが言うことを行い、コマンド(この場合uname -a)をbyobuセッションに「詰め込み」ます。
2011年

ああ、そこには関係がありませんでした。とにかく、助けてくれてありがとう、それは完全に動作します!
TheLQ、2011年

stuffコマンドはGNU画面でのみ機能し、tmuxでは機能しないようです。tmuxは最近デフォルトになっているようです。
Phil Ricketts

7

アタッチせずに、特定のスクリーンセッションの特定のスクリーンウィンドウにコマンドを送信できます。

screen -S sessionname -p windowname -X screencommand

セッション名は、-S画面またはsessionnameコマンドの起動時にオプションで設定されます。デフォルトでbyobuはbyobuが付いています。の後に画面PIDを使用することもできます-Stitleコマンドでウィンドウの名前を設定できます。ウィンドウ番号も使用できます。

screen -S byobu -p 1 -X stuff 'ls
'

スペースのない文字列を詰め込んだときにうまくいきますが、何もしません。何か案は?
フランソワボーソレイユ2013

はい、悪いです。スペースはbashによってローカルに解釈され、SSHは完全なコマンドを認識していませんでした。今すぐ機能します!
フランソワボーソレイユ2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.