Почему псевдонимы в неинтерактивной оболочке 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