Получение неожиданного цветного вывода на нескольких командах

scp использует ssh протокол для передачи файлов. Так как у Вас есть файл ключей в Вашем ~/.ssh/ каталог, scp предполагает, что Вы хотите использовать "вход в систему пароля меньше" (см., Как я могу настроить SSH на Linux для входа в систему пароля меньше?) использование тот ключ. Этот файл ключей, однако, защищен его собственным паролем, который необходимо ввести, прежде чем ключ может использоваться для шифрования связи с целевым компьютером.

В такой установке Вы должны иметь ssh-agent выполнение. Эта программа будет отслеживать ssh ключи, которые Вы используете и спросите Вас однажды на сессию для пароля файла ключей. В большей части настольного распределения ssh-агент запускается автоматически при входе в систему, таким образом, Вы надеваете, t должны волноваться об этом.

8
19.08.2013, 14:06
3 ответа

Это - нормальное поведение. Эти переменные среды содержат escape-последовательности, которые заставляют терминал изменять свой основной цвет. Вы получаете тот же визуальный эффект, когда любая программа производит их, быть им less или env.

Эти переменные должны содержать фактические символы ESC, меньше не делает никакой постобработки на них.

Обычно можно поместить меньше переменных конфигурации в lesskey файл, но это не работает на LESS_TERMCAP_xx переменные, потому что меньше читает их, прежде чем это считает lesskey файл (с меньше 444). Таким образом, у Вас нет выбора, кроме как помещать их в среду.

Если Вы хотите, чтобы эти переменные применялись только к man а не к другому использованию less, можно использовать псевдоним для man это устанавливает PAGER переменная к сценарию обертки, который устанавливает переменные среды.

#!/bin/sh
escape=␛     # a literal escape character
export LESS_TERMCAP_md=$escape'[01;34m'
…
exec less "$@"

(С другой стороны, используйте #!/bin/bash на первой строке и можно использовать #'\e' синтаксис для получения символа ESC. В системах, где /bin/sh тире, с помощью /bin/sh очень немного быстрее, хотя это не может быть примечательно на практике.)

Назовите этот сценарий less-color, и добавьте alias man='PAGER=less-color man' к Вашему ~/.bashrc или ~/.zshrc. В некоторых системах, вместо того, чтобы создать псевдоним, можно сказать man использовать другой пейджер путем установки MANPAGER переменная среды: export MANPAGER=less-color в Вашем ~/.profile.

4
27.01.2020, 20:12

Я предполагаю, что Вы по ошибке установили те значения переменных LESS_* к строкам, которые содержат фактические символы ESC, в противоположность строкам, которые содержат обратную косую черту, сопровождаемую e. Таким образом каждый раз, когда Вы отображаете те значения, они изменяют цвет Вашего терминала.

Я очень тщательно посмотрел бы на настройки, которые Вы установили в своем .bashrc, и удостоверьтесь, что они корректны. Я подозреваю, что все, что необходимо сделать, устраняют знак доллара.

1
27.01.2020, 20:12
  • 1
    Удаление знака доллара портит мои страницы справочника. Например, man top = \e[01;34mSYNOPSIS\e[00m вместо колоризации слово "РЕЗЮМЕ". –  Jeff 18.08.2013, 21:16
  • 2
    Знак доллара не работал. Можно ли думать об обходном решении? Возможно, способ ограничить их МЕНЬШЕ переменных, которые только будут использоваться на страницах справочника? –  Jeff 18.08.2013, 21:46

Как @Gilles указывает в его ответе, это - ожидаемое поведение.

Позвольте мне просто добавить информацию о паре. LESS_TERMCAP_xx переопределите возможности TERMCAP. Это переопределение организовано less самостоятельно в screen.c и значение просто используется позже, как будто оно было возвращено библиотекой TERMCAP. Это означает, что должна быть необработанная последовательность управляющих символов.

Моя учетная запись о том, как "зафиксировать" это, должна перенестись less самостоятельно

$ cat ~/bin/less 
#!/bin/bash

# Start bold mode
export LESS_TERMCAP_md=$'\e[1;37m'
# Start standout mode
export LESS_TERMCAP_so=$'\e[1;37;41m'
# End standout mode
export LESS_TERMCAP_se=$'\e[0m'
# Start underlining
export LESS_TERMCAP_us=$'\e[4;93m'
# End underlining
export LESS_TERMCAP_ue=$'\e[0m'
# End all mode like so, us, mb, md and mr
export LESS_TERMCAP_me=$'\e[0m'

exec /usr/bin/less "$@"
0
27.01.2020, 20:12
  • 1
    Забавный, я работаю над этим прямо сейчас, и это выглядит хорошим. У Вас есть версия, которая также работает с #!/bin/sh (который является тире в моем случае)? Я не могу выяснить, как вставить литерал ESC символ с энергией. –  Jeff 19.08.2013, 13:28
  • 2
    @Jeff Только от вершины моей головы можно всегда делать что-то как export LESS_TERMCAP_me="$(printf '\e[0m')". На самом деле, если Вы смотрите на ответ @Gilles, требует он export LESS_TERMCAP_me=$escape'[0m' должен работать с /bin/sh также. –  Miroslav Koškár 19.08.2013, 13:32

Теги

Похожие вопросы