web-dev-qa-db-ja.com

シェルコマンド出力を別のkonsoleシェルにリダイレクトする

シェルスクリプトを作成しています。スクリプトにコマンドを記述したいのですが、出力を他のkonsoleセッションにリダイレクトします。 (kdeを使用)

4
cjedic

まず、現在のttyセッションを識別する番号を探します。数をXと考えてみましょう:

| terminal 1               | terminal 2                |
 ------------------------------------------------------
| $ tty                    | $                         |
| /dev/pts/X               |                           |

次に、指定された番号を使用して、選択したttyに書き込みます。

| terminal 1               | terminal 2                |
 ------------------------------------------------------
| $ tty                    | $ echo "foo" > /dev/pts/X |
| /dev/pts/X               |                           |

そしてそれは生成します:

| terminal 1               | terminal 2                |
 ------------------------------------------------------
| $ tty                    | $ echo "foo" > /dev/pts/X |
| /dev/pts/X               |                           |
| foo                      |                           |
4
Rubens

出力を、他のセッションによって調整されたログファイルにパイプすることができます。

その他の端末の場合:

touch foo && tail -f foo

「メイン」ターミナル:

script.sh > foo
3
baloo

各端末でttyコマンドを使用して、それらを識別します。

$ tty
/dev/pts/0

$ tty
/dev/pts/1

これらのTTYを想定して、最初のstdoutを2番目にリダイレクトするには、最初のターミナルでこれを実行します。

exec 1>/dev/pts/1

注:すべてのコマンド出力がpts/1に表示されるようになりました

Pts/0のデフォルトの動作標準出力を復元するには:

exec 1>/dev/pts/0

デモについては このビデオ を参照してください。

0

現在使用している端末ではなく、端末出力をファイルに出力します。

commands >>outputfile

新しいターミナルでは、tailを使用して出力ファイルの内容を表示し、テキストが追加されると自動的に更新します。

tail -f outputfile
0
OB7

遅くなりますが、おそらく決して良くはありません... :-)

mkfifo ~/MyOutput           # Create the FIFO (Special file) 

./MyScript.sh > ~/MyOutput  # In the terminal/console 1
cat ~/MyOutput              # In another tty/console

info coreutils 'mkfifo invocation'から:

「FIFO」は、独立したプロセスが通信できるようにする特別なファイルタイプです。 1つのプロセスは書き込み用にFIFOファイルを開き、別のプロセスは読み取り用に開きます。その後、データはシェルまたは他の場所の通常の無名パイプと同じように流れることができます。

サイドノート:

  • FIFOホームディレクトリにない:-)を作成することをお勧めします
  • 同じプロセス(std out、std err)に対して複数のFIFOを持つことができます。
  • FIFOsからのダンプを要求しない限り、すべての出力が保持されます。
    最初に尋ねると、すべてがフラッシュアウトされます。
  • 別のファイルにリダイレクト(または追加)できますcat MyOutput >> NewRealFile
  • 別の端末からもcat MyOutputを使用できます!
  • 警告:2つの異なるプログラム(またはインスタンス)に出力を同じFIFOsにリダイレクトするように要求すると、フラックスがマージされます(いいえその行がどのプログラムから来ているかを区別するための先験的な方法)。
  • 警告:2回以上(おそらく異なる端末から)要求すると、要求ごとに1行が返され、出力が要求者に分割されます。
  • より複雑な用途があります: プログラムを適切に起動し、実行中の出力(stdoutおよびstderr)を後の段階でリダイレクトできるようにする方法は?
0
Hastur