Получите однострочные команды 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 видит, что он не пишет в терминал, и не выводит цвета.

Вы можете запустить 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>"

Связанный контент