Alias definido em .bashrc não funciona após o pipe

2

Estou com o seguinte problema.

Eu defini um alias em .bashrc (e .bash_profile ):

alias echo2="echo"

Isso funciona bem:

$ echo2 "test"
test

No entanto, se eu tentar usá-lo depois de um redirecionamento, ele não funcionará:

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

Alguém sabe por quê? Como eu poderia fazer isso funcionar?

    
por Eino Gourdin 04.02.2013 / 17:30

1 resposta

5

Você está colocando em um novo processo bash como entrada. Esse processo não carrega seus scripts de inicialização, portanto, não há alias definido.

Verifique a seção INVOCATION em man bash : Dependendo do arquivo no qual você definiu o alias, é necessário tornar o processo bash um shell de login ( -l ) ou interativo ( -i ) para carregar esse arquivo.

Há uma restrição adicional: os aliases são ignorados quando o shell não é interativo. Há uma solução alternativa:

   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).

Alternativamente, você poderia olhar para o uso de funções shell ao invés de aliases.

    
por 04.02.2013 / 17:36