Por que estou obtendo uma “contagem máxima inválida” do grep em um alias?

2

Então a ideia é criar um alias que pesquise o meu alias por mim. Eu tenho alguns.

dude@gnarleybox:~$ grep alg .bash_aliases.sh
alias alg='alias | grep '
dude@gnarleybox:~$ alias | grep alg
alias alg='alias | grep '
dude@gnarleybox:~$ alg gd
grep: invalid max count
dude@gnarleybox:~$ 

Huh? Como o grep está recebendo dois parâmetros? Como isso é possível? Note que eu também tentei sem o espaço no final:

alias alg='alias | grep' 

Você deve conseguir digitar:

 alg gd 

... e pegue o alias que eu uso para fundir o GoogleDocs.

    
por user447607 12.04.2015 / 03:49

2 respostas

0

Remova o espaço em branco no final da definição do alias (conforme sugerido por rici) e seu problema deve ser corrigido.

Mas; em casos como o seu, em que você tem não apenas sinônimos ou abreviações no alias, mas também código funcional com pipes, é melhor definir uma função em vez de um alias.

    
por 12.04.2015 / 09:36
2

Parece que gd também é um alias e se expande para -m e algo assim. Para ilustrar:

$ alias alg='alias | grep '
$ alias gd='-m foo'
$ alg gd
grep: invalid max count

A mensagem de erro exibida é o que grep imprime quando recebe a opção -m (número máximo) e um argumento não numérico. Se você executar alias | grep gd , aposto que verá que ele corresponde a algo como o que mostrei acima.

Como explicado em man bash :

If the last character of the alias value is a space or tab character, then the next command word following the alias is also checked for alias expansion.

Portanto, remover o espaço do alg alias também deve corrigi-lo.

Além disso, você tem certeza de que ~/.bash_aliases.sh está sendo lido? O nome de arquivo padrão é ~/.bash_aliases sem extensão. A menos que você esteja fornecendo explicitamente ~/.bash_aliases.sh , ele será ignorado.

    
por 12.04.2015 / 11:20

Tags