Если выход команды не заканчивается с \n
, появляется следующая подсказка, неуклюже, сразу же после этого:Настройки оболочка всегда печатать строки на новой строке, как Zsh
$ echo -n hai
hai$
Я только что заметил, коллега которого оболочка (ЗШ, для чего это стоит) выполнено с возможностью печатать %
(с фоновым и цветом переднего плана перевернутым для выразительности) с последующим \n
в таких случаях:
$ echo -n hai
hai%
$
Я хотел бы сделать то же самое. Я использую Bash. Это возможно? Если да, то что бы я добавил к моему ~/.bashrc?
UPDATE
Я провел несколько часов получить понимание того, как работает решение gniourf_gniourf в. Я поделюсь своими выводами здесь, если они будут полезны другим.
ESC[6n
представляет собой последовательность интродьюсер управления для доступа к позиции курсора (http://en.wikipedia.org/wiki/ANSI_escape_code).\e
не является допустимым выражением ESC при использованииecho
на OS X (https://superuser.com/q/33914/176942). Вместо этого можно использовать\033
. (http://tldp.org/LDP/abs/html/internalvariables.html#IFSREF).read -sdR
выглядит как стенография дляread -s -d -R
, но на самом деле «R» не флаг, это значение опции-d
(разделителей). Вместо этого я решил написатьread -s -d R
, чтобы избежать путаницы.Конструкция с двойными скобками,
((...))
, разрешает арифметическое расширение и оценку (http://tldp.org/LDP/abs/html/dblparens.html).
Вот соответствующий отрывок из моей .bashrc:
set_prompt() {
# CSI 6n reports the cursor position as ESC[n;mR, where n is the row
# and m is the column. Issue this control sequence and silently read
# the resulting report until reaching the "R". By setting IFS to ";"
# in conjunction with read's -a flag, fields are placed in an array.
local curpos
echo -en '\033[6n'
IFS=';' read -s -d R -a curpos
curpos[0]="${curpos[0]:2}" # strip leading ESC[
((curpos[1] > 1)) && echo -e '\033[7m%\033[0m'
# set PS1...
}
export PROMPT_COMMAND=set_prompt
Примечание: curpos[0]="${curpos[0]:2}"
линия не нужна. Я включил его, чтобы этот код можно было использовать в контексте, где строка также имеет значение.
Почему бы не спросить его, как это делается. Скорее всего, это будет тот же самый фрагмент в вашем '~/.bashrc', что и его' ~/.zshrc'. Этот вопрос может быть лучше подходит для [Server Fault] (http://serverfault.com/), но где вы желая только добавлять строки без \ n перерывов? – MattSizzle
Я спросил его, и мы посмотрели его ~/.zshrc, но не смогли найти код. Да, я хотел бы добавить только вывод, который не заканчивается на '\ n'. – davidchambers
Это то, что я не смог найти вчера в Google, и, похоже, является zch-специфичным, поскольку у него есть много новой информации о обработке линии. Я собираюсь рассмотреть это позже сегодня вечером, поскольку я хочу знать, как сделать это сам сейчас. – MattSizzle