
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 はターミナルに書き込んでいないと認識し、色を出力しません。
-t
ターミナルを割り当てるオプションを指定して ssh を実行できます。次のようにすると色が印刷されます。
ssh -t user@host "ls --color=auto"
ssh
が非対話的に実行されていて、ローカル出力が端末に送信されない場合は、1 つのフラグは無視されます。この場合、 ssh にリモート システムに TTY を割り当てるように強制するために、複数回-t
指定できます。-t
ssh -tt user@host "ls --color=auto"
答え2
--color=always
lsの場合は色を強制するためにを使用することをお勧めします。また、色付けをサポートしているが をサポートしていない他のアプリで色付けするには--color=value
、次の方法を試すこともできます。ssh <host> -t "TERM=${TERM} <command>"