Alo*_*dal 1 bash loops for-loop pipe tee
这可能是新手逃避问题。我正在尝试在这样的 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;
Run Code Online (Sandbox Code Playgroud)
但我最终还是sorter.log
空虚了。(我确定有一些输出。)如果我转义管道符号 ( \|
),我最终会得到任何输出sorter.log
。
我究竟做错了什么?
$ bash --version
GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)
编辑:哎呀,/media/mybook/ 睡着了,所以实际上没有输出。该代码首先是正确的。不过还是谢谢大家的评论。
格伦说得好。我想提供一个不同的角度:您可以将“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
Run Code Online (Sandbox Code Playgroud)