0

次のコード:

#!/bin/bash -x
mkfifo pipe 2>/dev/null
tee pipe >/dev/null &
cat pipe

次のように実行すると、出力は生成されません。

$ echo "hi" | ./test.sh
+ mkfifo pipe
+ cat pipe
+ tee pipe
$

なぜ?!teestdinを名前付きパイプ(および/dev/nullcatにコピーしてから、名前付きパイプの内容をstdoutにコピーすることを期待します。なぜ動かないの?!

私はもっ​​と大きなbashスクリプトを書き込もうとしていますが、。teeの代わりに何か他のものを使用して、そこに本当に必要です/dev/null。予期しない動作を上記の例に絞り込みました。

4

1 に答える 1

2

プロセスをバックグラウンド処理すると、その標準入力は次のように設定されます。/dev/null

#!/bin/bash -x
mkfifo pipe 2>/dev/null
cat - | tee pipe >/dev/null &
cat pipe

したがって、親の必要なものを指定する必要があります。この場合、とstdinの間のパイプです。echo./test.sh

于 2013-01-16T04:02:06.967 に答える