Você esqueceu esta linha:
shopt -s expand_aliases
por exemplo,
#!/bin/bash
shopt -s expand_aliases
alias grep='grep -n'
out=$(grep word "$1")
echo "$out"
Eu me deparei com esse problema ao tentar criar um script para fazer o grep em vários arquivos por 10 palavras diferentes.
O script que criei é (minificado)
#!bin/bash
alias grep='grep -n'
out='grep word $1'
Saída
some text word
some other text word more text
O grep funciona, mas o alias não está sendo considerado. Ele apenas exibe as linhas correspondentes e não os números de linha ( -n
é para números de linha)
e agora, se eu executar o abaixo, ele funciona bem
#!bin/bash
out='grep -n word $1'
Saída e a saída esperada do script acima:
233: some text word
532: some other text word more text
Eu tenho a declaração grep em muitos lugares no script e não quero editar cada linha. Eu estou olhando para substituir o grep uma vez por aliasing, mas não parece estar funcionando.
Qual poderia ser o problema aqui? Como posso fazer o alias funcionar?
Você esqueceu esta linha:
shopt -s expand_aliases
por exemplo,
#!/bin/bash
shopt -s expand_aliases
alias grep='grep -n'
out=$(grep word "$1")
echo "$out"
O problema é que você criou um alias para o seu shell real. Quando você usa backticks (ou $(...)
), você executa um sub-shell que ignora seu alias (os aliases do AFAIK não podem ser exportados, então você teria que redefini-los no sub-shell).
No seu caso, talvez a melhor abordagem seja definir uma variável contendo o comando. Diga:
MY_GREP="grep -n"
out='${MY_GREP} word $1'
Tags bash alias shell-script