Eu tenho este setup
arquivo:
function latest {
count=${1:-5} ;
echo "Just changed"
ls -lrtd * | tail -$count ;
}
Eu o chamo:
. setup
Então eu pergunto ao bash se a latest
função está definida:
>type latest
latest is a function
latest ()
{
count=${1:-5};
echo "Just changed";
ls --color=auto -lrtd * | tail -$count
}
Just changed
é uma string arbitrária que usei para ter certeza de que não estava olhando para uma definição de latest
outro arquivo.
E a pergunta é: por que o Bash está adicionando o --color=auto
comando ls
(onde não é útil, pois a saída é canalizada de qualquer maneira). E sim, no meu shell ls
é alias para ls --color=auto
, e se eu remover o alias isso não acontece. Mas eu pensei que os aliases não eram usados em funções e de qualquer forma essa substituição aconteceu na hora da definição da função?
Você observou comportamento documentado; na seção Alias do manual do bash :
Jeff está correto acima. Para ver os aliases definidos em seu shell, digite "alias" no prompt.
Exemplo:
Para evitar o alias em seu script, você precisaria unaliar o comando "ls" ou chamá-lo diretamente. Para encontrar a localização de "ls", use o tipo shell embutido:
Você pode colocar isso em uma variável e chamar "ls" usando a variável:
No primeiro caso, chamar apenas "ls" fornece a saída em cores porque "ls" é alias para "ls --color=auto", mas o segundo caso fornece a saída sem cor, pois o alias é ignorado.
Ambas as respostas mais antigas são verdadeiras, elas explicam por que e quando o Bash expande os aliases. Mas se você deseja se livrar do (irritante) ls-alias tornando algumas listagens de diretório ilegíveis com cores muito parecidas na tela, a definição do alias a ser removido está no arquivo /etc/skel/.bashrc