GNU/Linux >> Linux の 問題 >  >> Linux

切り離された画面へのテキスト入力の送信

問題の少なくとも一部を解決できます:stop の理由 部分が機能していません。実験的に、デタッチ モード (screen -d -m) で Screen セッションを開始すると、 )、ウィンドウが選択されていないため、入力は後で screen -X stuff で送信されます 失われるだけです。キーストロークをウィンドウ 0 (-p 0 )。なんらかの理由でその Screen セッションで別のウィンドウを作成した場合に備えて、これはとにかく良い考えです。

screen -S minecraft -p 0 -X stuff "stop^M"

(画面翻訳 ^M Enter によって送信される文字である control-M に キー)

スクリプトからセッションを開始する際の問題は、unMENU に関連している可能性があります。


最初に、改行を簡単に入力するための注意:

$() construct は command の出力から改行を取り除き、出力行を他のプログラムの引数として使用できるようにします。これにより、予期しない動作が発生する可能性があります。この場合、具体的に Enter に相当するものを送信しようとしていると仮定します キーストローク。 \r で送信しているキャリッジ リターンの間 余分なコマンドを必要とせずにその文字を入力する簡単な方法がいくつかあります。

<オール>
  • 二重引用符の中に通常の改行を入れることができます

    screen -S minecraft -X stuff "stop
    "
    
  • または、Ctrl を使用してターミナル ラインに文字を入力することもできます +v 入る 順序。これは ^M のようになります 端末では、これは特殊な改行文字です。

    screen -S minecraft -X stuff "stop^M"
    
  • 第二に、不規則な画面の動作に関するメモ。 (Gilles による説明と解決策)

    Screen には、アタッチされたことのない screen セッションへの入力の受け入れに関する問題があります。これを実行すると失敗します:

    screen -d -m -S minecraft zsh
    screen -S minecraft -X stuff "stop^M"
    screen -r minecraft
    

    しかし、これを実行すると動作します:

    screen -d -m -S minecraft zsh
    screen -r minecraft (then disconnect with Ctrl-a-d)
    screen -S minecraft -X stuff "stop^M"
    screen -r minecraft
    

    最後に、はるかに優れた動作の tmux を使用できます screen の代わりに .

    GNU-Screen は デファクト です ターミナルマルチプレクサは長年にわたって開発されてきましたが、長い間開発が中止されており、バグや癖が修正されていません。 Tmux は活発に開発されており、画面には触れられない多くの機能が含まれており、箱から出してすぐに使用できる動作はかなり直感的です。また、より適切に文書化されています。コードを変換する方法は次のとおりです:

    # Start new detached tmux session with a named window pane running the java app
    tmux new-session -d -n minecraft /usr/lib/java/bin/java [args]
    
    # Send it keys to stop the mincraft server
    tmux send-keys -t minecraft "stop^M"
    

    この古い投稿を掘り下げて申し訳ありませんが、同様の問題が発生したときにこの情報が入手できていれば、私の努力に役立ちました. bash スクリプトで画面コマンドを送信する方法については、多くの質問があります。猫の皮を剥ぐのと同じようにこれが行われるかもしれませんが、私はこの方法が好きです。これにより、say_this 関数を呼び出すだけで、任意のコマンドを送信したり、何かを言ったりすることができます。

    #!/bin/bash
    
    say_this()
    {
        screen -S minecraft -p 0 -X stuff "$1^M"
    }
    
    say_this "say Saving world"
    say_this "save-off"
    say_this "save-all"
    ...
    

    これはsshで!

    #!/bin/bash
    
    say_this()
    {
        # Dont forget to set NAME or whatever
        ssh -p 8989 192.168.1.101 screen -S $NAME -p 0 -X stuff \"$1^M\"
    }
    
    say_this "say test"
    say_this "say [email protected]#$%^&*()<>?This string will work!"
    

    Linux
    1. Linux –切り離された画面にテキスト入力を送信しますか?

    2. 外部からスクリーンセッションに入力を送信しますか?

    3. Linux –テキストコンソールで画面ブランキングを無効にしますか?

    1. 画面を強制的に空白にして入力を無視しますか?

    2. 切り離された画面セッションを強制終了します

    3. テキスト コンソールでスクリーン ブランクを無効にする

    1. キーボード入力とテキスト出力はどのように機能しますか?

    2. Gnu Screen:切り離されたセッションをStdoutに印刷しますか?

    3. 非公開の画面解像度?