Como ls
não é invocado pelo seu shell no primeiro exemplo, o alias não funciona com xargs
.
Aliases não são exportados para subshells, é por isso que o segundo exemplo falha.
Como os aliases são avaliados depois que uma linha é lida, você não pode, por exemplo, foo=$( alias ls='ls -l' ; ls )
.
Para obter o efeito desejado apenas em bash
, você pode usar funções, por exemplo,
function ls { /bin/ls -F "$@" ; }
você pode adicioná-los a subshells como este para que funcione:
ret=$( function ls { /bin/ls -l "$@" ; } ; ls )
A solução adequada para que funcione em todos os locais onde qualquer programa executa ls
, coloque um script chamado ls
antes do ls
real na pesquisa $PATH
que chama o% realls
com% co_de parâmetro%.
#!/bin/bash
/bin/ls -F "$@"
Salvar como -F
e /usr/local/bin/ls
.
Esteja ciente dos programas que usam export $PATH=/usr/local/bin:$PATH
codificados e dos programas que analisam a saída de /bin/ls
e falharão quando o formato for diferente do esperado.