Почему псевдонимы в неинтерактивной оболочке Bash не работают
-
06-07-2019 - |
Вопрос
Я пытаюсь использовать псевдонимы в неинтерактивной оболочке bash. Я определил свои псевдонимы в ~ / .bashrc
и установил переменную BASH_ENV = ~ / startUpFile
. Содержимое файла startUpFile: source ~ / .bashrc
.
Я вижу, что мои псевдонимы распознаются, когда я выполняю команду alias
. Однако, если я попытаюсь использовать псевдоним, определенный в ~ / .bashrc
, Bash не сможет его распознать. Это дает мне неизвестную ошибку команды.
С оболочкой TCSH это довольно легко сделать, потому что файл ~ / .cshrc
всегда читается.
Есть идеи, как мне это сделать с помощью оболочки Bash? Р>
Решение
Команда 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