Eu tenho um comando definido como um alias assim:
alias badalarm="cat ~/sagLogs/* | grep -I 'failed to generate expected' | awk '{print $4}' | sort | uniq | tee /dev/tty | wc -l"
Ele me dá essa saída:
$ badalarm
alg-t1sg0103
alg-t1sg0104
all-t1sg0006
all-t1sg0009
input)
5
No entanto, se eu executar os comandos da CLI diretamente, recebo:
$ cat ~/sagLogs/* | grep -I 'failed to generate expected' | awk '{print $4}' | sort | uniq | tee /dev/tty | wc -l
alg-t1sg0103
alg-t1sg0104
all-t1sg0006
all-t1sg0009
4
Como é que a versão do alias está pegando algum outro arquivo? Quando eu uso
cat ~/sagLogs/* | grep 'failed to generate expected'
Eu recebo esta saída:
[...]
Apr:09:09:31:01: >>>1 on all-t1sg0009 failed to generate expected 134
Apr:09:09:31:01: >>>2 on all-t1sg0009 failed to generate expected 107
Apr:09:09:31:01: >>>2 on all-t1sg0009 failed to generate expected 108
Apr:10:08:00:35: >>>1 on all-t1sg0009 failed to generate expected 133
Apr:10:08:00:35: >>>1 on all-t1sg0009 failed to generate expected 107
Binary file (standard input) matches
Como posso omitir o arquivo de 'entrada padrão' do meu alias?
Quando você declara seu alias,
$4
o comando noawk
comando está entre aspas duplas (já que toda a string do alias está entre aspas duplas). Isso significa que ele será expandido pelo shell, provavelmente para uma string vazia. Não importa que$4
esteja entre aspas simples entre aspas duplas.Em vez disso, considere usar uma função shell,
Isso evita problemas de cotação.
Eu também encurtei um pouco o pipeline e substituí a saída diretamente para o TTY pela saída para a saída padrão (para que a saída
tee
e a saídawc -l
sejam enviadas para lá).