如何将输出重定向到 bash 中的文本文件并同时将其显示在终端中?

如何将输出重定向到 bash 中的文本文件并同时将其显示在终端中?

如果我使用文本重定向器>并且>>它们输出到文本文件,这对于长期日志记录来说很好,但是,我还需要它们以传统的标准输入,标准输出格式出现在屏幕上,因为我正在通过 Ansible 中的 shell(bash)函数运行代码。

使用>>可以让 Ansible 相信这是一个成功的操作,即使它失败了,这是不可取的。有没有人能帮助我实现鱼与熊掌兼得的场景?

答案1

单程将其管道化tee -a /dev/tty >> file如下:

echo "This is some text" | tee -a /dev/tty >> file

其他方式tee -a file通过管道传输而不进行重定向,如下所示:

echo "This is some text" | tee -a file

第三种方法(如果您需要>>在命令后直接执行)是重定向到/dev/tty(但不保存到文件),如下所示:

echo "This is some text" >> /dev/tty

如果这还不够的话,然后你可以使用命名管道(此过程需要两个终端)通过my_pipe在一个终端中创建一个名为 eg 的命名管道,如下所示:

mkfifo my_pipe

然后,将输出重定向到它,如下所示:

echo "This is some text" >> my_pipe

然后,从另一个终端读取该命名管道并对输出执行任何您想做的事情,如下所示:

cat my_pipe | tee -a file

或者像这样(让管道在写入之间保持等待/打开以进行读取):

tail -F my_pipe | tee -a file

请记住,路径像任何其他文件一样应用于命名管道...因此,请确保在使用时提供命名管道的正确路径。

答案2

我发现这是一个合适的解决方案,但好奇是否还有更好的方法。

echo "Hello" >> file && cat file

相关内容