色を表示するためのSSHワンライナーコマンドを取得する

色を表示するためのSSHワンライナーコマンドを取得する

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=alwayslsの場合は色を強制するためにを使用することをお勧めします。また、色付けをサポートしているが をサポートしていない他のアプリで色付けするには--color=value、次の方法を試すこともできます。ssh <host> -t "TERM=${TERM} <command>"

関連情報