De man bash
:
Aliases allow a string to be substituted for a word when it is used as the first word of a simple command.
O cano não pode ser a primeira palavra de um comando simples.
Estou tentando criar um alias que comece com um pipe.
ex:
echo -i "hello\nworld" | grep world
> world
alias gr="| grep"
echo -i "hello\nworld" gr world
> hello
> world gr world
Ou seja, se o alias começar com um canal, o aliasing parece não funcionar corretamente. Existe uma maneira de fazer isso?
Ah, seu alias funciona. Tente gr
sozinho e seu shell lançará um erro de sintaxe devido a |
no início da linha. Isso significa claramente que o alias funciona, ou seja, substitui uma string por outra quando é suposto .
No seu exemplo, gr
é tratado como um argumento para echo
, e é por isso que não há substituição. Não seria, mesmo se não houvesse nenhum tubo dentro do alias. O símbolo do pipe inicial não decide se o aliasing ocorre ou não; no entanto, isso leva a um erro quando ocorre, mas esse erro não tem nada a ver com a mecânica do alias.
Se você pode / quer mudar de shell, você pode fazer isso em zsh, definindo o alias como
alias -g gr="| grep"