进一步阅读

进一步阅读

假设我想查看命令的输出,例如apt-get.但是,如果我运行重定向输出的命令,例如

apt-get install some-application -y > apt_out.txt

或者

apt-get install some-application -y | tee apt_out.txt

那么我将失去与程序输入交互的能力。然而我的解决方法是使用screen -L会话,但是会有更干净的东西吗?

答案1

让我们从功能集和行为的角度来看待这个问题,而不是一些未指定的概念清洁度

A不太通用机制比screen -L,但是尽管如此出于您的目的,该命令不执行什么操作screentee即允许轻松交互使用,并且当程序发现标准输出不是终端时不使程序陷入非交互或缓冲输出模式)script

脚本-c“apt-get安装某些应用程序”apt_out.txt

一个不同的机制scriptptybandage适合在命令管道中使用,以及才不是要求它自己的外部标准 I/O 实际上是一个终端。 (事实上​​,它的主要用例是使非交互式标准 I/O 对于子程序来说看起来像交互式标准 I/O。)这是一种说服程序在其交互式/行缓冲模式下运行,同时仍然使用直通管道的tee方法。

ptybandage apt-get install some-application 2>&1 | ptybandage apt-get install some-application 2>&1 | ptybandage apt-get install some-application 2>&1 |三通 apt_out.txt

进一步阅读

答案2

screen -L对我来说听起来是一个很好的解决方案。另一种选择是script(这也会记录控制字符和错误输入,有些人觉得这令人困惑)。

许多程序都会测试它们的输入和输出是否连接到终端,并且会根据此失败或改变它们的行为。请参阅lsvs.ls | cat的一个小例子。

相关内容