
私は bash スクリプトを書いていますが、最後のコマンドを別のプロセスとして開始したいと考えています。最後のコマンドは、すべての出力をファイルに送ります。ただし、出力はコンソールに表示させたいです。これまでのところ、
$ command > "file" &
これは出力を「ファイル」に送信し、コマンドを独自のプロセスとして開始します。ただし、同時にコンソールで出力を確認したいです(ただし、Ctrl + CまたはW / Eを押してもコマンドは停止しません)。これは、この質問ただし、独自のスレッドにする必要があるという注意点があります。
私が試してみました:
$ command | tee "file" &
しかし問題は、Tee がプロセスの一部であり、出力が実際には表示されないことです。
明確にするために、私はcommand
独自のプロセスで出力をファイルに送信し、出力がコンソールに表示されるようにしたいのです (q、enter、ctrl+c などを押すまで)。これは bash スクリプトなので、2 つの別々の行でも問題ありません。
答え1
command
ファイルへの書き込みを終了したいが、コンソールへの表示を中断できるようにしたいようです。解決策としては別のアプローチをとります。スクリプトでは次のようになります。
> "file"
command > "file" &
tail -n +1 -F "file"
修正:
元の回答では が使用されていました-n 0
が、これは最初は の行を出力しませんが、 の起動後"file"
に に追加された行を出力します。これは私の意図したものではなく、間違いでした。の起動前に何らかの行が書き込まれていたとしても、のすべての行をリストするオプションを使用するつもりでした。その動作の正しいオプションは です。"file"
tail
"file"
command
tail
-n +1
man ページからtail(1)
:
-n, --lines=K は最後の 10 行ではなく、最後の K 行を出力します。 または-n +Kを使用してK番目から始まる行を出力します
tail
最初の行は、 が の前にファイルにヒットする競合状態の場合に備えて、ファイルの内容をクリアしますcommand
。