在可滾動尋呼機中查看命令輸出
我想從頂部查看命令的輸出並防止終端跳下,我想要一種獨立於終端的方式。因此無需更改終端特定配置。我嘗試使用這樣的
less
命令:command | less
但是在我使用的命令中,尋呼機在命令輸出完成後退出。
如何獲得命令輸出實時流式傳輸到尋呼機的行為,但我可以從上到下查看它?
問題是我沒有將 stderr 輸出重定向到
less
,出於某種原因: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
在 bash 中,顯然您可以使用
&>
而不是2>&1
. 它們是等價的。 在 zsh 中,這似乎不起作用,儘管它是以這種方式記錄的。
沒有在輸入結束時退出
預設情況下,只有在使用 quit 命令 (
q
) 時,less 才會自動退出。如果您
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 會繼續讀取,直到命令完成。您可以使用 來減少中斷Ctrl+C
,但是您將無法從該命令讀取任何進一步的輸出,並且該命令可能由於管道損壞而死。這是因為 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