在可滚动寻呼机中查看命令输出

在可滚动寻呼机中查看命令输出

我想从顶部查看命令的输出并防止终端跳下,并且我想要一种独立于终端的方式。所以无需改变终端具体配置。我尝试使用less这样的命令:

command | less

但是,在我使用的命令中,寻呼机在命令输出完成后退出。

如何获得命令输出实时传输到寻呼机中的行为,但我可以从上到下查看它?

答案1

输入结束时不退出

默认情况下,less 不会自动退出,除非您使用 quit 命令 ( q)。

如果您less使用 option调用-E,它将在到达文件末尾时退出。使用选项-e,当您尝试移过文件末尾(例如通过重复滚动)时,它会退出。使用选项-F,如果文件完全显示在一个屏幕上,则 less 立即退出。默认情况下,这些选项均未启用,但有几种方法可以将它们设置为系统上的默认选项:

  • less可能是带有选项的 shell 别名。检查与alias less.
  • LESSLess启动时会从环境变量中读取选项。检查与echo $LESS.
  • Less 有一个配置文件。它的默认位置是.less在您的主目录中;这可以通过设置环境变量来更改LESSKEY。文件格式是二进制的,但如果以这种方式设置选项,则字符串LESS和选项都会出现在文件中。
  • 这不太可能,但如果设置了环境变量LESS_IS_MORE, less 的行为就像旧实用程序一样more,包括默认在文件末尾退出。

在完成之前查看命令输出

当您将命令的输入通过管道传输到 less ( mycommand | less) 时,less 会继续读取,直到命令完成。您可以使用 中断 less Ctrl+C,但随后您将无法从该命令中读取任何进一步的输出,并且该命令可能会因管道损坏而终止。这是因为 less 在停止读取时会关闭管道。

解决此问题的方法是将命令输出到文件并对该文件调用 less。当 less 正在从文件中读取数据时,您可以键入F,然后Ctrl+C使其从文件中读取更多数据,然后继续浏览。

mycommand >log 2>&1 &
less log

程序的行为可能略有不同,具体取决于其输出是终端、管道还是文件。如果您发现当输出是文件或管道而不是终端时输出出现延迟,那是由于输出缓冲。看关闭管道中的缓冲

script公用事业在虚拟终端中运行程序并将整个输出记录到文件中。就程序而言,它将输出写入终端。例如,程序可以使用颜色转义序列。将选项传递-R给 less 以使其将终端转义序列传递到终端,而不是以转义形式显示控制字符。

script -c 'mycommand --option || echo "mycommand failed with status $?"' mycommand.log </dev/null >/dev/null &
less -R mycommand.log

答案2

问题是less由于某种原因我没有将 stderr 输出重定向到:

command 2>&1 | less 

产生所需的行为。

通过使用,less -R您可以保留从 重定向的彩色输出command,但某些命令在重定向其输出时会自动省略着色,并且您需要寻找一个选项,例如--color=always始终获取彩色输出。

就我而言,我现在将输出重定向到bat,它是 的克隆,具有更多功能,带有cat选项--paging=always和,我使用s 选项:--pager="less -RFX"--numbercargo build--color=always

cargo build --color=always 2>&1 | bat --paging=always --pager="less -RFX" --number

这会产生漂亮的、可滚动的、带有编号行的彩色输出:

   1    Compiling openlimits v0.1.0 (/home/####/git/openlimits)
   2 error[E0433]: failed to resolve: use of undeclared type or module `tokio`
   3   --> src/binance/client/websocket.rs:15:5
   4    |
   5 15 | use tokio::net::TcpStream;
   6    |     ^^^^^ use of undeclared type or module `tokio`
   7
   8 error[E0433]: failed to resolve: use of undeclared type or module `tokio_tungstenite`
   9   --> src/binance/client/websocket.rs:16:5
  10    |
  11 16 | use tokio_tungstenite::{
  12    |     ^^^^^^^^^^^^^^^^^ use of undeclared type or module `tokio_tungstenite`
  13
  14 error[E0433]: failed to resolve: use of undeclared type or module `tokio`
  15   --> src/coinbase/client/websocket.rs:10:5
  16    |
  17 10 | use tokio::net::TcpStream;
  18    |     ^^^^^ use of undeclared type or module `tokio`
  19
....

然后我将选项放入 和 的配置文件中batcargo使它们隐式存在,现在我在键入时得到此行为

cargo build 2>&1 | bat

在 bash 中,显然你可以使用&>代替2>&1.它们是等价的。 在 zsh 中,这似乎不起作用,尽管是这样记录的

相关内容