私が起動したと仮定すると、program
標準出力にいくつかの出力を書き込む作業が進みます。パイプラインが生成する行数を計算できるようにパイプラインを追加する方法はありますかwc -l
?
答え1
Linuxではこれを行うことができます。スクリプトがあるとしますs
。
#!/bin/bash
i=0
echo my pid: "$$"
while true; do
echo "$i"; ((i++)); sleep 1;
done
走る:
$ ./s
my pid: 8815
0
1
2
それはすべてです。これでgdb
プロセスに接続する必要があります。
gdb -p 8815
ここで以下を実行してくださいgdb
。
p close(1)
これにより、STDOUTファイル記述子が閉じます。次に、新しいアイテムを開きます。
p creat("/tmp/8815.out", 0600)
他の端末では、既に読み取りプロセスを設定できます。
tail -f /tmp/8815.out
gdb
他の端末から切り離す必要があるため、まだ進行がありません。 +CtlまたはD:
q
Quit anyway? (y or n)
y
使用して確認してくださいEnter。これで、次の内容が表示されます(tail
where run)。
173
174
175
既存のファイルまたはパイプを使用するには、次の手順に従ってくださいgdb
。
p open("/path/to/your/output", 1)
これはSTDOUTリダイレクトを示しています。数字が2であることを除いて、STDERRに似ています。
私は次の2つの答えを使用しました。
答え2
tee
プログラムの起動時に利用可能です。 Bashを使用すると、次のことができます。
program > >(tee -a log.txt)
program
代わりにstdoutを実行中のプロセスにリダイレクトしますtee
。これは実際にはprogram
toの標準出力コピーを作成しますlog.txt
。 tee
動作方法に応じて、以前に行った場所(おそらく端末)に標準出力を送信し続けますprogram
。