alias criado localmente não sendo usado se chamado usando backticks (')

3

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?

    
por mtk 15.04.2015 / 13:41

2 respostas

2

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"
    
por 15.04.2015 / 14:28
-1

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'
    
por 15.04.2015 / 13:49