考虑以下 shell 脚本
val=($ls)
ls 不会给出任何 shell 文本输出。现在,我们如何在执行命令时在屏幕上获取输出文本?
我可以打印 val 的值来获取输出,但使用 echo 不是重点。所以,使用下面的行就不是这样的
echo $val
那么,简而言之,如何获得在 shell 中同时执行的当前命令的输出,就好像您自己执行了该命令一样?
答案1
您可以通过运行以下命令让 shell 回显它正在执行的所有操作:
sh -x yourscript
或者您可以将其添加为脚本中的第一个命令:
set -x
不过,它可能有点过于冗长。对于调试来说是可以的,但是如果您想要选择性输出,最好自己小心地放置 echo 命令。
答案2
您可以tee
命令将标准输出的副本发送到文件,并且可以使用当前终端作为该输出文件。正如您在下面看到的,如果您不使用输出做任何事情,它将打印两次,如果标准输出因对其执行某些操作而被吞没,它将打印一次:
$ echo foo | tee -a "$(tty)"
foo
foo
$ echo foo | tee -a "$(tty)" | grep bar
foo