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

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

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

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

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

4 ответа

Решение

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

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

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

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

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

Ты должен

shopt -s expand_aliases

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

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

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

If not running interactively, don't do anything
[ -z "$PS1" ] && return
Другие вопросы по тегам