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

Mic*_*ael 2 command-line bash redirect ansible

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

使用>>会让 Ansible 相信它是一次成功的操作,即使它失败了,这是不可取的。对于如何实现鱼与熊掌兼得的场景有什么帮助吗?

Raf*_*ffa 6

一种方法是将其通过管道传输,tee -a /dev/tty >> file如下所示:

echo "This is some text" | tee -a /dev/tty >> file
Run Code Online (Sandbox Code Playgroud)

另一种方法是将其通过管道传输tee -a file,而不进行重定向,如下所示:

echo "This is some text" | tee -a file
Run Code Online (Sandbox Code Playgroud)

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

echo "This is some text" >> /dev/tty
Run Code Online (Sandbox Code Playgroud)

如果这还不够,那么您可以通过在一个终端中创建名为 例如 的命名管道来使用命名管道(此过程需要两个终端),my_pipe如下所示:

mkfifo my_pipe
Run Code Online (Sandbox Code Playgroud)

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

echo "This is some text" >> my_pipe
Run Code Online (Sandbox Code Playgroud)

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

cat my_pipe | tee -a file
Run Code Online (Sandbox Code Playgroud)

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

tail -F my_pipe | tee -a file
Run Code Online (Sandbox Code Playgroud)

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