如果我使用文本重定向器>
并且>>
它们输出到文本文件,这对于长期日志记录来说很好,但是,我还需要它们以传统的标准输入,标准输出格式出现在屏幕上,因为我正在通过 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