Как получить зеленые/красные терминалы под OpenBSD?

Прокси представляет веб-страницу после начального 1-го использования прокси, прося имя пользователя и пароль. Я думаю, что это могло вызывать проблему, есть ли какой-либо способ, которым конфетка может иметь дело с этим?

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

2
07.05.2012, 02:58
3 ответа

Проблема только bash имеет PROMPT_COMMAND. Попробуйте это вместо этого:

PS1='\[$(if (($?)); then tput setaf 1; else tput setaf 2; fi)\]'\
'[\u@\h \w]\['"$(tput sgr0)"'\]'

¹ Протест: Я не протестировал это на ksh, но это избегает PROMPT_COMMAND и работы в bash.

² tput использует Вашу систему terminfo базы данных. Это обычно более портативно и удобно в сопровождении, чем escape-последовательности жесткого кодирования, обеспечил, terminfo установлен правильно.

3
27.01.2020, 21:57
  • 1
    tput: Неизвестная terminfo возможность "2", когда я регистрирую на пути console:P –  LanceBaynes 07.05.2012, 05:31
  • 2
    , необходимо установить TERM к чему-то, что поддерживает setaf атрибут, например. TERM=xterm. (Я думаю, что ошибка указывает tput не знает это setaf берет числовой аргумент, так как он не установлен для Вашего текущего терминала.) –  Mikel 07.05.2012, 06:15

Проблема только bash имеет PROMPT_COMMAND. Попробуйте это вместо этого:

PS1='\[$(if (($?)); then tput setaf 1; else tput setaf 2; fi)\]'\
'[\u@\h \w]\['"$(tput sgr0)"'\]'

¹ Протест: Я не протестировал это на ksh, но это избегает PROMPT_COMMAND и работы в bash.

² tput использует Вашу систему terminfo базы данных. Это обычно более портативно и удобно в сопровождении, чем escape-последовательности жесткого кодирования, обеспечил, terminfo установлен правильно.

3
27.01.2020, 21:57

Каждая оболочка поступает по-своему расширения подсказки. ksh OpenBSD является pdksh. Посмотрите его быстрые настройки в руководстве, под PS1 параметр.

Путь ksh работы состоит в том, что это выполняет замену параметра, замену команды и арифметическую замену (весь $ расширения) на значении PS1 прежде, чем распечатать подсказку. Таким образом, Вы устанавливаете PS1 раз и навсегда, но значение повторно создано каждый раз. (Можно сделать это в ударе также, если Вы помещаете shopt -s promptvars в Вашем .bashrc.)

ksh OpenBSD поддерживает Escape обратной косой черты, подобные удару. С другими версиями ksh необходимо было бы перевести escape-последовательности подсказки удара в $ замены также.

PS1='$(if (($? == 0)); then print -n "\\033[32m"; else print -n "\\033[31m"; fi)'
PS1="$PS1"'[\u@\h \w]'$(print '\033')'[0m '

Простой перевод выше имеет несколько дефектов:

  • Это разветвляет процесс каждый раз, для анализа $?. Существует способ избежать этого, но это - hackish в ksh88.
  • Это вызывает ошибки перерисовки из-за управляющих последовательностей нулевой ширины. Этого можно избежать с грубым взломом, зарегистрированным в руководство.

Вот некоторый более сложный код, который использует арифметику, чтобы не порождать подоболочку и заботится о разграничивании непечатаемых последовательностей.

escape=$(print '\033')
ctrla=$(print '\001')
PS1=$(print '\001\015')
PS1=$PS1$ctrla$escape'[$(($? ? 31 : 32))m'$ctrla
PS1=$PS1'[\u@\h \w]'
PS1=$PS1$ctrla$escape'[0m'$ctrla' '
2
27.01.2020, 21:57

Теги

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