Como expandir aliases em qualquer chamada de / bin / bash

2

Algum de vocês sabe uma maneira de expandir um alias sempre que um novo shell é invocado (de qualquer lugar)?

Por exemplo, meu alias é:

alias ls='ls -F'
  • Agora, se eu invoco em

    grep -l ramesh | xargs ls
    

    ... aqui eu deveria pegar a saída ls -F .

  • Se eu fizer por exemplo

    cut -f 1 'ls test*'
    

    Eu deveria receber uma substituição ls -F .

Dentro de um script de shell, existe essa opção shopt -s expand_aliases , mas como posso obtê-lo em todos os lugares?

    
por Telex 12.10.2011 / 11:00

1 resposta

4

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.

    
por 12.10.2011 / 12:34

Tags