如何在 linux shell 上显示完整输出?
How to show full output on linux shell?
我有一个运行并显示 GUI 的程序 window。它还在 shell 上打印了很多东西。我需要查看打印的第一件事和最后打印的东西。问题是当程序终止时,如果我滚动到 window 的顶部,程序开始时打印的内容将被删除。因此,在程序期间打印的内容现在位于顶部。所以这意味着我无法查看打印的第一件事。
我也尝试过 > out.txt
,但问题是文件只有在我手动关闭 GUI window 时才会关闭并可读。如果它输出到文件,屏幕上不会打印任何内容,我也无法知道程序是否完成。我也不能修改任何代码。
有没有办法让我看到打印在 shell 上的整个文本列表?
谢谢
当程序的输出进入您的终端 window 时,程序通常会在每个换行符后刷新其输出。这就是您以交互方式查看输出的原因。
当您将程序的输出重定向到 out.txt
时,它只会在其内部缓冲区已满时刷新其输出,这可能是在每 8KiB 输出之后。这就是为什么您不会立即在文件中看到任何内容,并且在程序退出(并刷新其最后一个 partially-full 缓冲区)之前看不到程序打印的最后内容。
您可以使用 script
命令诱使程序认为它正在将其输出发送到终端:
script -q -f -c myprogram out.txt
此 script
命令运行 myprogram
连接到 newly-allocated “pseudo-terminal”(或简称 pty
)。这使 myprogram
认为它正在与终端对话,因此它会刷新每个换行符的输出。 script
命令将 myprogram
的输出复制到您的终端 window 和文件 out.txt
.
请注意 script
会将 header 行写入 out.txt
。我找不到在我的测试 Linux 系统上禁用它的方法。
在上面的例子中,我假设你的程序没有参数。如果是这样,您要么需要将程序和参数放在引号中:
script -q -f -c 'myprogram arg1 arg2 arg3' out.txt
或者将程序命令行放在 shell 脚本中,然后将该 shell 脚本传递给 script
命令。
您也可以在终端上使用 tee
命令在文件中获取 output/error:
your-command |& tee out.log
请记住,默认情况下此输出是行缓冲的(大小为 4k)。
我有一个运行并显示 GUI 的程序 window。它还在 shell 上打印了很多东西。我需要查看打印的第一件事和最后打印的东西。问题是当程序终止时,如果我滚动到 window 的顶部,程序开始时打印的内容将被删除。因此,在程序期间打印的内容现在位于顶部。所以这意味着我无法查看打印的第一件事。
我也尝试过 > out.txt
,但问题是文件只有在我手动关闭 GUI window 时才会关闭并可读。如果它输出到文件,屏幕上不会打印任何内容,我也无法知道程序是否完成。我也不能修改任何代码。
有没有办法让我看到打印在 shell 上的整个文本列表?
谢谢
当程序的输出进入您的终端 window 时,程序通常会在每个换行符后刷新其输出。这就是您以交互方式查看输出的原因。
当您将程序的输出重定向到 out.txt
时,它只会在其内部缓冲区已满时刷新其输出,这可能是在每 8KiB 输出之后。这就是为什么您不会立即在文件中看到任何内容,并且在程序退出(并刷新其最后一个 partially-full 缓冲区)之前看不到程序打印的最后内容。
您可以使用 script
命令诱使程序认为它正在将其输出发送到终端:
script -q -f -c myprogram out.txt
此 script
命令运行 myprogram
连接到 newly-allocated “pseudo-terminal”(或简称 pty
)。这使 myprogram
认为它正在与终端对话,因此它会刷新每个换行符的输出。 script
命令将 myprogram
的输出复制到您的终端 window 和文件 out.txt
.
请注意 script
会将 header 行写入 out.txt
。我找不到在我的测试 Linux 系统上禁用它的方法。
在上面的例子中,我假设你的程序没有参数。如果是这样,您要么需要将程序和参数放在引号中:
script -q -f -c 'myprogram arg1 arg2 arg3' out.txt
或者将程序命令行放在 shell 脚本中,然后将该 shell 脚本传递给 script
命令。
您也可以在终端上使用 tee
命令在文件中获取 output/error:
your-command |& tee out.log
请记住,默认情况下此输出是行缓冲的(大小为 4k)。