从脚本执行时打印命令结果

时间:2016-10-27 08:12:25

标签: bash shell

我正在尝试从shell脚本运行一个打印输出的C ++程序(使用std::cout),我希望在程序运行时在控制台中看到它们

我尝试过这样的事情:

RES=`./program`
RES=$(./program)

但我所能做的就是只在最后显示结果:echo $RES ...

如何在控制台中以及变量RES中的运行时显示输出?

5 个答案:

答案 0 :(得分:2)

TTY=$(tty);
SAVED_OUTPUT=$(echo "my dummy c++ program" | tee ${TTY});
echo ${SAVED_OUTPUT};

打印

my dummy c++ program
my dummy c++ program

首先我们保存当前终端的名称(因为tty在管道中不起作用)。

TTY=$(tty)

然后我们" T"输出(字母T看起来像是底部的一个流,顶部的2个,来自同一个"管道"隐喻为" pipe"),将其复制到给定的文件名;在这种情况下,"文件"是一个代表我们终端的特殊设备。

echo "my dummy c++ program" | tee ${TTY}

答案 1 :(得分:0)

RES=( $(./program) )
echo ${RES[@]}

你可以这样试试

答案 2 :(得分:0)

您可以使用临时文件

./program | tee temp
RES=$(< temp)
rm temp

您可以使用mktemp生成具有唯一名称的临时文件。

答案 3 :(得分:0)

 res=$(sed -n 'p;' <<< $(printf '%s\n' '*' $'hello\t\tworld'; sleep 5; echo "post-streaming content")&;wait)     
 echo $res
 #output
 *
 hello           world
 post-streaming content

答案 4 :(得分:0)

[sky@kvm35066 tmp]$ cat test.sh 
#!/bin/bash
echo $BASH_VERSION
res=$(printf '%s\n' '*' $'hello\t\tworld'; sleep 5; echo "post-streaming content")
echo "$res"

[sky@kvm35066 tmp]$ bash test.sh 
4.1.2(1)-release
*
hello           world
post-streaming content

我认为结果是正确的,这是你想要的