Подтвердить что ты не робот

Почему псевдонимы в неинтерактивной оболочке Bash не работают

Я пытаюсь использовать псевдонимы в неинтерактивной оболочке bash. Я определил свои псевдонимы в ~/.bashrc, и я установил переменную BASH_ENV=~/startUpFile. Содержимое startUpFile source ~/.bashrc.

Я вижу, что мои псевдонимы распознаются при выполнении команды alias. Однако, если я попытаюсь использовать псевдоним, определенный в ~/.bashrc, bash не сможет его распознать. Это дает мне неизвестную ошибку команды.

С оболочкой TCSH это довольно легко сделать, поскольку файл ~/.cshrc всегда читается.

Любые идеи, как я могу это сделать с оболочкой bash?

4b9b3361

Ответ 1

Команда shopt -s expand_aliases разрешает расширение псевдонима в неинтерактивных оболочках.

Ответ 2

.bashrc обрабатывается только интерактивными оболочками.

Кроме того, псевдонимы не расширяются, если оболочка не является интерактивной, если параметр expand_aliases shell не установлен с помощью shopt. Если, конечно, режим POSIX не вызван вызовом оболочки с именем sh вместо bash.

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

Мне кажется, что в 21-м веке мы должны отказаться от сценариев оболочки в пользу полномасштабного языка, такого как Python. Это намного более предсказуемо.

Ответ 3

Вы должны

shopt -s expand_aliases

в файле, указанном в BASH_ENV

Ответ 4

У меня была аналогичная проблема, в конце концов, я узнал, что ~/.bashrc все, что мне нужно.

Однако в Ubuntu мне пришлось прокомментировать строку, которая перестает обрабатывать ~/.bashrc:

If not running interactively, don't do anything
[ -z "$PS1" ] && return