6

Я хотел бы включить цветной вывод текста в однострочных командах SSH, но я не могу заставить его работать в OS X, Ubuntu 14.10 или OpenSUSE 12.2.

Если я ввожу ssh на сервер и наберу в командной строке, скажем, ls --color=auto , он будет работать нормально, показывая каталоги, символические ссылки и обычные файлы разными цветами, однако, если я помещу команду в ssh one- лайнер в той же системе: ssh user@host "ls --color=auto" , вывод не цветной.

Ввод echo $TERM дает мне xterm-256color независимо от того, поместил ли я это в однострочную инструкцию.

Это главным образом для ошибок цветового кодирования и предупреждений на удаленных сборках, но было бы хорошо, чтобы это было включено для всего.

Любой совет?

2 ответа2

10
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"
0

Я бы предложил использовать --color=always в случае ls, чтобы форсировать цвет. И чтобы иметь цвета в других приложениях, которые поддерживают раскраску, но не поддерживают --color=value , вы также можете попробовать ssh <host> -t "TERM=${TERM} <command>"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .