【发布时间】:2016-10-19 08:47:13
【问题描述】:
我遇到了以下问题:
我正在解析 bash 脚本中的文件并准备如下输出格式:
echo "Evaluation of data from $date" > $outPut
printf "\n%s\t\t\t%s\t\t%s\n" "column1" "column2" "column3" >> $outPut
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - >> $outPut
cat $file | \
while read i;
do
...
printf "..."
done >> $outPut
如果 $outPut 是一个文件,它可以正常工作。但是根据程序参数 $output 可以是 /dev/stdout。
如果我将输出通过管道传输到 less
bash someprogram.bash --tostdout | less
less 立即以零输出开始。过了一会儿,我看到了一切,但如果我这样做 :G less 就会停止工作,我只能用 CTRL-C 停止它。如果我不通过管道输出,则输出正常。
我想要的是:收集输出后立即编写所有内容的函数+等待我的程序完成的管道。
【问题讨论】:
-
可以是
/dev/stdout是什么意思?怎么设置成/dev/stdout,为什么不让它正常输出呢? -
如果文件参数没有设置我做
outPut=/dev/stdout -
您可能还想调整脚本中的缓冲。 linux.die.net/man/1/stdbuf
标签: bash redirect pipe output wait