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

StackOverflow https://stackoverflow.com/questions/1615877

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top