Bash脚本捕获终端输出

11
我想在我的Bash脚本中将某个命令在终端上的输出捕获到一个变量中。我尝试了以下方法:
TEST_OUT=`the_command ARG1`   #Nope

#Putting the line "the_command ARG1" into a separate script, testing2.sh,

TEST_OUT=$(./testing2.sh)   #Nope

testing2.sh
TEST_OUT=$?  #Nope

我非常确定当我运行时...

> the_command ARG1

当我在终端中运行时,它会将我想要捕获的信息完全打印到终端上。

感谢任何帮助!


1
标准错误输出似乎没有被捕获在你的脚本中,因此它将被打印到终端。 - C2H5OH
1
如果输出被发送到stderr,您需要在将其捕获到变量中之前将其重定向到stdout。尝试使用TEST_OUT=$(the_command ARG1 2>&1) - Shawn Chin
抱歉,我是bash和脚本的新手...在终端上打印输出有两种方式,stderr和stdout吗? - JDS
@ShawnChin 哇,它起作用了!太棒了!发表你的答案,我会接受的。 - JDS
1
已发布。顺便说一下,通常使用stdout打印到终端,仅在出现错误消息时使用stderr(这样当某人将输出重定向到文件或变量时不会被隐藏)。有关stdout和stderr的快速说明,请参见http://en.wikipedia.org/wiki/Standard_streams#Standard_error_.28stderr.29。 - Shawn Chin
1个回答

19

如果输出被发送到stderr,你需要将其重定向到stdout,然后才能在变量中捕获它。尝试:

TEST_OUT=$(the_command ARG1 2>&1)

太棒了,我不知道stderr和stdout之间的区别。好东西。 - JDS
1
如果你只想要标准错误输出,使用 $(the_command ARG1 2>&1 >/dev/null) - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接