Странный вывод при перенаправлении приглашения bash в файл

Похоже, что эта странная концепция является результатом того факта, что bashзапускался не как клон оболочки POSIX, а как клон Bourne Shell.

В результате интерактивное поведение POSIX ($ENV, которое вызывается для интерактивных оболочек ), было добавлено позже к bashи не получило широкой известности.

Существует одна оболочка, обеспечивающая аналогичное поведение. Это csh, и csh предоставляет, что $promptимеет определенные значения :

.
$prompt not set          non-interactive shell, test $?prompt.
$prompt set but == ""   .cshrc called by the which(1) command.
$prompt set and != ""    normal interactive shell.

Но это не относится ни к Bourne Shell, ни к оболочкам POSIX.

Для оболочки POSIX:единственный разрешенный метод - поместить код для интерактивных оболочек в файл:

$ENV

с именем, характерным для оболочки. Это, например,.

$HOME/.kshrc    for the korn shell
$HOME/.bashrc   for bash
$HOME/.mkshrc   for mksh
$HOME/.shrc     for the POSIX Bourne Shell

Другие люди упомянули флаг оболочки -i, но его нельзя использовать для надежного программирования. POSIX не требует, чтобы set -iработал, и чтобы $-содержал iдля интерактивных оболочек. POSIX просто требует, чтобы sh -iпереводил оболочку в интерактивный режим.

Поскольку переменная $PS1может быть импортирована из среды, она может иметь значение даже в не-интерактивном режиме. Тот факт, чтоbashunsets PS1в любой не -интерактивной оболочке, не предусмотрен стандартом и не выполняется никакой другой оболочкой.

Таким образом, чистое программирование (даже сbash)заключается в том, чтобы помещать команды для интерактивных оболочек в $HOME/.bashrc.

1
23.06.2021, 19:07
0 ответов

Теги

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