「for」ループに「ティー」を備えたパイプ
質問
これはおそらく初心者の逃亡の問題です。私はこのようなループのためにrunコマンドを試みています
$ for SET in `ls ../../mybook/WS/wsc_production/`; do ~/sandbox/scripts/ftype-switch/typesort.pl /media/mybook/WS/wsc_production/$SET ./wsc_sorter/$SET | tee -a sorter.log; done;
しかし、私は終わります sorter.log
空である。 (確かにそこにいます は ある出力。)パイプシンボルから逃げた場合(\|
)、私は終わりません sorter.log
まったく。
私は何が間違っているのですか?
$ bash --version
GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
編集: おっと、/メディア/マイブック/眠りに落ちるので、実際に 出力がありませんでした. 。そもそもコードは正しかった。ただし、コメントをありがとうございました。
解決 3
私の最も深い謝罪、問題はどこか他の場所であり、私のスクリプトは実際には何も出力しませんでした。今では機能します。
私が問題が逃げることであるという幻想を得た2つの理由:
- もちろん、知識と経験の欠如の影響であるバッシュスクリプトに対する自信の欠如
- また、注意の欠如 - USBのディスクが眠っていたことを心に留めていなかったので、実際にループを試したとき だった 出力なし
まあ、それは私の知識への道につまずいている人のためです... :)
他のヒント
あなたが使用しています tee
, 、したがって、出力がある場合、端末に表示されます。何が見えますか?
出力が表示されている場合、おそらくあなたが見ているstderrなので、リダイレクトしたいかもしれません。
dir1=$HOME/sandbox/scripts/ftype-switch
dir2=/media/mybook/WS/wsc_production
for SET in ../../mybook/WS/wsc_production/*; do
$dir1/typesort.pl $dir2/$SET ./wsc_sorter/$SET 2>&1 | tee -a sorter.log
done
グレンはよく言った。別の角度を提供したいのですが、forループの外側に「ティー」コマンドを移動できます。このアプローチの利点は、ティーが一度だけ呼び出されることです。
dir1=$HOME/sandbox/scripts/ftype-switch
dir2=/media/mybook/WS/wsc_production
for SET in ../../mybook/WS/wsc_production/*; do
$dir1/typesort.pl $dir2/$SET ./wsc_sorter/$SET 2>&1
done | tee -a sorter.log
所属していません StackOverflow