
我想在 SSH 單行命令上啟用彩色文字輸出,但我似乎無法讓它在 OS X、Ubuntu 14.10 或 OpenSUSE 12.2 上運作。
如果我 ssh 進入伺服器並在提示符中鍵入ls --color=auto
,它會正常工作,以不同的顏色顯示目錄、符號連結和常規文件,但是,如果我將命令放在同一系統上的 ssh 單行中:ssh user@host "ls --color=auto"
,輸出沒有著色。
打字echo $TERM
可以告訴我xterm-256color
是否將其放入一行語句中。
這主要用於遠端建置上的顏色編碼錯誤和警告,但最好能夠為所有內容啟用它。
有什麼建議嗎?
答案1
ssh user@host "ls --color=auto"
ls
僅在寫入終端時輸出顏色。當您指定在遠端主機上執行的命令時ssh
,ssh 預設不會指派 TTY(終端介面)。因此,當您執行上述命令時,ssh 不會在遠端系統上分配終端,ls 會發現它沒有寫入終端,並且不會輸出顏色。
您可以執行 ssh 並-t
選擇使其分配終端。應列印以下顏色:
ssh -t user@host "ls --color=auto"
如果ssh
以非互動方式運行,並且自己的本地輸出不會發送到終端,那麼它將忽略單個-t
標誌。在這種情況下,您可以-t
多次指定以強制 ssh 在遠端系統上指派 TTY:
ssh -tt user@host "ls --color=auto"
答案2
我建議--color=always
在 ls 的情況下使用,以強制顏色。並且要在其他支援著色但不支援 的應用程式中使用顏色--color=value
,您也可以嘗試ssh <host> -t "TERM=${TERM} <command>"