我想从顶部查看命令的输出并防止终端跳下,并且我想要一种独立于终端的方式。所以无需改变终端具体配置。我尝试使用less
这样的命令:
command | less
但是,在我使用的命令中,寻呼机在命令输出完成后退出。
如何获得命令输出实时传输到寻呼机中的行为,但我可以从上到下查看它?
答案1
输入结束时不退出
默认情况下,less 不会自动退出,除非您使用 quit 命令 ( q
)。
如果您less
使用 option调用-E
,它将在到达文件末尾时退出。使用选项-e
,当您尝试移过文件末尾(例如通过重复滚动)时,它会退出。使用选项-F
,如果文件完全显示在一个屏幕上,则 less 立即退出。默认情况下,这些选项均未启用,但有几种方法可以将它们设置为系统上的默认选项:
less
可能是带有选项的 shell 别名。检查与alias less
.LESS
Less启动时会从环境变量中读取选项。检查与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"
--number
cargo 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
....
然后我将选项放入 和 的配置文件中bat
,cargo
使它们隐式存在,现在我在键入时得到此行为
cargo build 2>&1 | bat