
Я хотел бы включить цветной текстовый вывод для однострочных команд 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>"