我正在尝试从shell脚本运行一个打印输出的C ++程序(使用std::cout
),我希望在程序运行时在控制台中看到它们
我尝试过这样的事情:
RES=`./program`
RES=$(./program)
但我所能做的就是只在最后显示结果:echo $RES
...
如何在控制台中以及变量RES
中的运行时显示输出?
答案 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
我认为结果是正确的,这是你想要的