web-dev-qa-db-ja.com

ファイルの代わりにteeを使用して中間結果をstdoutに出力する

処理の中間段階でパイプラインのコンテンツをキャプチャするために、ls /bin /usr/bin | sort | uniq | tee abc.txt | grep outとしてteeを使用しますが、uniqの後にのコンテンツをabc.txtにリダイレクトしたくない場合はどうでしょうか。 butto screen(through stdout、ofcourse)最終結果として、画面に表示されます。uniqの後の中間コンテンツとgrepの後のコンテンツです。

13
Aman

/ dev/ttyがそのために使用できることもあります...

ls /bin /usr/bin | sort | uniq | tee /dev/tty | grep out | wc
13
JJoao

このコマンドでうまくいきました。

ls /bin /usr/bin | sort | uniq | tee /dev/pts/0 | grep out

コマンドttyを使用して端末を確認し、ティーを置き換えて出力をその端末にリダイレクトできます。

参照

https://stackoverflow.com/a/18025293/1742825

2
Ramesh

もう1つのオプション:プロセス置換を使用します。

ls /bin /usr/bin | sort | uniq | tee abc.txt >(grep out)

または、別の形式で:

ls /bin /usr/bin | sort | uniq | tee abc.txt >(cat) | grep out
2
muru
ls /bin /usr/bin | sort | uniq | tee /dev/fd/2 | grep out | wc

Linuxシステムでは、/dev/fd/[num]多くの場合、名前付きパイプのようなリンク。これはstdoutをstderrに複製します。これは通常、端末screenですが、そうである必要はありません。

2
mikeserv
mkfifo myfifo
cat myfifo& ls /bin /usr/bin | sort | uniq | tee myfifo | grep out

mkfifoは、名前付きパイプとも呼ばれるFIFO(先入れ先出し))特殊ファイルを作成します。非同期catを開始してfifoから読み取り、次にパイプラインを実行し、中間結果をfifoにteeingします。

これにより、最後に[1]+ Done cat myfifoメッセージが生成されます。あなたはこの手品でそれを抑制することができます:

(cat myfifo&); ls /bin /usr/bin | sort | uniq | tee myfifo | grep out

長期的で堅牢なソリューションの場合、毎回新しいものを作成するのではなく、永続的なfifo($HOME/myfifoなど)を作成したい場合があります。しかし、これの複数のインスタンスを同時に実行している場合は、失敗します。または、

  • 一意の名前を生成します(例:mktemp)。
  • 書き込み可能であることが保証されているディレクトリ(/tmpなど)にfifoを作成します。
  • コマンドの最後にあるfifoを削除します。
1
Scott

これがあなたができるターミナルから実行されている場合

  • tmuxやscreenなどのターミナルマルチプレクサを起動する
  • 端末を分割する-tmux CtrlB"
  • 最初のウィンドウでtouch abc.txt、次にtail -f abc.txt
  • 2番目のウィンドウに切り替えて、コマンドを実行します。 tee updateによって作成されたファイルが表示されます。
0
Nick B.

http://tldp.org/LDP/abs/html/io-redirection.html

cat stuff | 3>&1 tee 3 | xsel -i

編集:残念ながら、上記の↑は正しくありません。以前の答え

cat stuff  | tee >(cat) | xsel -i

でもいいです。

0
Gis Ochre