他の疑似端末のシェルにデータを送信できますか?

他の疑似端末のシェルにデータを送信できますか?

次の図は、疑似端末の動作方法を示しています。

ここに画像の説明を入力してください。

"Hello"2つの端末エミュレータが開いている場合は、最初の端末エミュレータから2番目の端末エミュレータに文字列を送信できます。

echo "Hello" > /dev/pts/1

このコマンドが実行されると、文字列は"Hello"2番目の擬似端末のスレーブ側から2番目の擬似端末のホスト側に送信され、次に2番目の端末エミュレータに表示されます。

これで、反対方向、つまり端末エミュレータ(またはシェルが実行されているプロセス)の代わりにシェルにデータを送信できますか?

答え1

あなたが探しているものはまったくないかもしれませんが、私は通常ターミナルでスクリーンセッションを実行してこのような問題を解決します。

私はこうする:

  • ターミナル1では、次の新しいスクリーンセッションを開始します。1学期多くのscreen -S term1
    場合、この機能が必要な場合、端末1はまだ存在しません。この場合、新しい端末でセッションを作成します。xterm -e screen -S term1 & ; disown
    あなたは気になるでしょう& ; disown。これはxtermが起動した後にシェルに戻りxtermたいと思います。
  • 2番目の端末で、次の操作を行います。 (screen -S term2または以下を実行して新しい端末を作成しますxterm -e screen -S term2 & ; disown。)
  • 現在のコミュニケーション業務は次のとおりです。
    • 次のコマンドを使用して、どこからでも(ターミナル2を含む)最初の端末にテキストを送信できます。結果は最初の端末に入力してを押す
      screen -S term1 -X stuff 'echo "foo"\n'
      のと同じです。echo "foo"Enter
    • より簡単な例:入力を送信しますがsome wordsいいえEnterこれを使用してターミナル2に進みます。screen -S term2 -X stuff 'some words'

注:

  • スクリーンセッションの名前を指定した場合、またはterm1別のterm2名前を使用した場合
  • すでに存在する端末で実行されている場合はscreen -S somename、実行後にscreenセッションのみが終了しますのでご注意くださいexit
    端末全体を停止するには、screen -S somename ; exit代わりに使用してください。
    新しく作成された端末ではこれは必要ありません。

答え2

TIOCSTIは、コメントで説明されているように機能します。トリガー以上:https://stackoverflow.com/a/29615101/2995591

答え3

各プロセスには3つの基本的な「ファイル記述子」があります。

0 is stdin  (standart input)
1 is stdout (standart output)
2 is stderr (standart error output)

シェルプロセスのPIDを見つける必要があり、次のことができます。

echo "test" > /proc/{your_shell_pid}/fd/1

その後、テストはシェルプロセスの標準出力として印刷されます。

関連情報