É possível que ls mantenha a ordem de suas entradas

3

Se eu fizer /usr/bin/which --all git , mostrarei todas as ocorrências de git no meu $PATH , onde a primeira linha mostra o efetivo .

Na figura abaixo, a versão git em /home/kmodi/stowed/bin/git é a efetiva.

Agora eu queria saber os verdadeiros nomes dos arquivos dos resultados.

Então, para /home/kmodi/stowed/bin/git , que é um link simbólico, eu queria saber para o que isso apontava.

Fazer /usr/bin/which --all git | xargs \ls -Fpl mostra a referência do link simbólico. Mas a saída é confusa .. a ordem original dos arquivos listados não é mantida! Portanto, agora, olhando para essa saída (abaixo), pode-se pensar que a versão em /cad/.. é o caminho binário efetivo de git .

Existe uma maneira de fazer com que xargs conserve esse pedido?

Seforimportante,estouusandotcshshell.

GraçasàdicadoJohnsobre-n1,eufinalmentetenhoumasoluçãoqueeugosto.Éconfuso..essascitações!(graçasatcsh),masfunciona.

aliaswhichall'/usr/bin/which--all\!*\|xargs-n1\ls-Fpl--color=always\|awk-vOFS="" '"'"'{$1=$2=$3=$4=$5=$6=$7=$8=""; print $0}'"'"' \
                | \sed '"'"'/^$/d'"'"'; \
               '

Agora, whichall git dá:

    
por Kaushal Modi 18.05.2017 / 17:43

1 resposta

5

O comando xargs manteve a ordem de seus argumentos, mas passou todos eles para uma instância de ls , que forneceu a saída em ordem alfabética, o que ela faz por padrão. Para obter o comportamento desejado, adicione um argumento -n 1 ao comando xargs para passar apenas uma linha de saída para ls por vez ou, se estiver usando a implementação GNU de ls , adicione um -U opção para dizer a ele para não classificar a lista de arquivos.

Comportamento de ls :

$ ls -lad /usr/bin /etc
drwxr-xr-x. 146 root root 12288 May 18 09:46 /etc
dr-xr-xr-x.   2 root root 57344 Dec 12 15:30 /usr/bin
    
por 18.05.2017 / 17:47

Tags