Какая оболочка реализует семантику POSIX для переменной PS1? - PullRequest
1 голос
/ 24 марта 2019

В разделе 2.5.3 IEEE Std 1003.1, редакция sh издания 2004 года относительно переменной среды PS1 определено:

Каждый раз, когда интерактивная оболочкаготовность прочитать команду, значение этой переменной должно быть подвергнуто расширению параметра и записано со стандартной ошибкой.Значением по умолчанию должно быть «$».Для пользователей, которые имеют определенные дополнительные привилегии, определенные реализацией, значением по умолчанию может быть другое значение, определяемое реализацией.Оболочка должна заменять каждый экземпляр символа '!'в PS1 с номером файла истории следующей команды, которая будет набрана.Спасаясь от "!"с другим '!'(то есть, «!!») ставит буквальный символ «!»в подсказке.Этот том IEEE Std 1003.1-2001 определяет влияние переменной только для систем, поддерживающих опцию Утилиты переносимости пользователя.

Так что, похоже, ! можно использовать в переменной PS1 для замены наномер файла истории следующей команды для ввода.Если вы попробуете это в реализации оболочки Bourne, такой как dash, вы обнаружите, что она не реализована.Это также не реализовано в сегодняшнем выпуске GNU.

Какая оболочка это реализует?

1 Ответ

1 голос
/ 24 марта 2019

bash реализует это, если вы установите переменную окружения POSIXLY_CORRECT или вызовете bash с опцией --posix:

PS1='!$ ' POSIXLY_CORRECT=1 bash
2$ echo foo
foo
3$ !2
echo foo
foo
3$ 
...