1

これはおそらく初心者の脱出の問題です。このようなforループでコマンドを実行しようとしています

$ 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)

編集:おっと、/ media / mybook /がスリープ状態になったため、実際には出力がありませんでした。そもそもコードは正しかった。コメントをありがとうございました。

4

3 に答える 3

5

グレンはよく言った。別の角度から提案したいと思います。「tee」コマンドを for ループの外に移動できます。このアプローチの利点は、tee が 1 回だけ呼び出されることです。

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
于 2011-07-26T16:20:26.957 に答える
4

を使用して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
于 2011-07-26T15:15:22.253 に答える
2

深くお詫び申し上げます。問題は別の場所にあり、私のスクリプトは実際には何も出力しませんでした。今では動作します。

問題がエスケープにあると私が錯覚した理由は2つあります。

  • もちろん、知識と経験の不足の影響である bash スクリプトの自信の欠如
  • また、注意の欠如 - USB 上のディスクがスリープ状態になることは頭に浮かびませんでした。そのため、ループを試してみると、実際は出力がありませんでした。

まあ、それは私の知識への道でつまずいたためです... :)

于 2011-07-28T11:17:48.967 に答える