bash命令替换部队到前台

bash命令替换部队到前台,bash,command-substitution,Bash,Command Substitution,我有这个: echo -e "\n\n" find /home/*/var/*/logs/ \ -name transfer.log \ -exec awk -v SUM=0 '$0 {SUM+=1} END {print "{} " SUM}' {} \; \ > >( sed '/\b0\b/d' \ | awk ' BEGIN {printf "\t\t\tTRANSFER LOG\t\t\t\t\t#OF HITS\n"}

我有这个:

echo -e "\n\n"
find /home/*/var/*/logs/ \
     -name transfer.log \
     -exec awk -v SUM=0 '$0 {SUM+=1} END {print "{} " SUM}' {} \; \
  > >( sed '/\b0\b/d' \
       | awk ' BEGIN {printf "\t\t\tTRANSFER LOG\t\t\t\t\t#OF HITS\n"}
               {printf "%-72s %-s\n", $1, $2}
             ' \
       | (read -r; printf "%s\n" "$REPLY"; sort -nr -k2)
     )
echo -e "\n\n"
当在带有bash4.1.2的机器上运行时,总是正确返回,除非我将所有4行新代码都放在顶部

当运行在BASH 3.00 .15的机器上时,它将所有4条新行放在顶端,在输出中间返回提示,并且永远不会完成挂起。


我真的很想为这两个版本解决这个问题,因为我们有很多机器同时运行这两个版本。

为什么要让生活变得如此困难和难以理解?为什么不简化呢

TXFRLOG=$(find /home..... transfer.log)
awk .... ${TXFRLOG}

我找到的答案是用一段时间阅读

echo -e "\n\n"; \
printf "\t\t\tTRANSFER LOG\t\t\t\t\t#OF HITS\n"; \
while read -r line; \
do echo "$line" |sed  '/\b0\b/d' | awk '{printf "%-72s %-s\n", $1, $2}'; \
done < <(find /home/*/var/*/logs/ -name transfer.log -exec awk -v SUM=0 '$0 {SUM+=1} END{print "{} " SUM}' {} \;;) \
|sort -nr -k2; \
echo -e "\n\n"

echo-e\n\n导致新行对吗?您可能希望尝试简化查找…>>塞德…|啊…|。。。寻找……|塞德…|啊…|。我不知道这是否是问题所在,但流程替换涉及到Bash的一些技巧,因此这似乎是有道理的。是的@JKB,但它们都处于最高层output@menders65Bash4.1.2总是正确返回,但是我在网站上得到了我所有的4行新代码,你声明了这一点,这就是我声明它的原因:如果它需要,那么保留它。