Почему псевдонимы в неинтерактивной оболочке Bash не работают - PullRequest
41 голосов
/ 24 октября 2009

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

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

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

Есть идеи, как мне это сделать с помощью оболочки Bash?

Ответы [ 4 ]

43 голосов
/ 24 октября 2009

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

15 голосов
/ 24 октября 2009

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

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

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

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

7 голосов
/ 24 октября 2009

Вы должны

shopt -s expand_aliases

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

3 голосов
/ 13 ноября 2010

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

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

If not running interactively, don't do anything
[ -z "$PS1" ] && return
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...