2

Я застрял со следующей проблемой.

Я определил псевдоним в .bashrc.bash_profile):

alias echo2="echo"

Это хорошо работает:

$ echo2 "test"
test

Однако, если я пытаюсь использовать его после перенаправления, он не работает:

ls | awk '{print "echo2 "$1}' | bash
bash: line 1: echo2: command not found
bash: line 2: echo2: command not found
...

Кто-то знает почему? Как я мог заставить это работать?

1 ответ1

5

Вы вводите его в новый процесс bash качестве входных данных. Этот процесс не загружает ваши сценарии инициализации, поэтому псевдоним не определен.

Проверьте раздел INVOCATION в man bash: в зависимости от файла, в котором вы определили псевдоним, вам нужно сделать процесс bash либо оболочкой входа (-l), либо интерактивной (-i) для загрузки этого файла.

Есть дополнительное ограничение: псевдонимы игнорируются, когда оболочка не является интерактивной. Есть обходной путь, хотя:

   Aliases  are not expanded when the shell is not interactive, unless the
   expand_aliases shell option is set using shopt (see the description  of
   shopt under SHELL BUILTIN COMMANDS below).

В качестве альтернативы, вы можете изучить использование функций оболочки вместо псевдонимов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .