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是空的。(我确信有一些输出。)如果我转义管道符号 ( \|),我最终会得到 no 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 只被调用一次:

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

我深表歉意,问题出在其他地方,我的脚本实际上根本没有输出任何东西。现在它起作用了。

我错觉问题出在逃跑的两个原因:

  • 当然,对 bash 脚本缺乏信心,这是缺乏知识和经验的结果
  • 而且,缺乏注意力——我没有想到USB上的磁盘睡着了,所以当我尝试循环时实际上没有输出

好吧,那是因为我的知识之路有些磕磕绊绊...... :)

于 2011-07-28T11:17:48.967 回答