Como faço para diferenciar a saída de dois comandos?

125

Eu imaginava que a maneira mais simples de comparar o conteúdo de dois diretórios semelhantes seria algo como

diff 'ls old' 'ls new'

Mas vejo por que isso não funciona; diff está recebendo uma grande lista de arquivos na linha de comando, em vez de dois fluxos como eu esperava. Como faço para passar as duas saídas para diff diretamente?

    
por Ternary 15.12.2012 / 23:01
fonte

2 respostas

182

A substituição do comando '…' substitui a saída do comando na linha de comando, portanto diff vê a lista de arquivos nos dois diretórios como argumentos. O que você deseja é que diff veja dois nomes de arquivos em sua linha de comando e tenha o conteúdo desses arquivos como as listagens de diretório. Isso é o que a substituição de processos faz.

diff <(ls old) <(ls new)

Os argumentos para diff serão parecidos com /dev/fd/3 e /dev/fd/4 : eles são descritores de arquivos correspondentes a dois canais criados por bash. Quando diff abrir esses arquivos, ele será conectado ao lado de leitura de cada canal. O lado de gravação de cada pipe está conectado ao comando ls .

    
por Gilles 15.12.2012 / 23:06
fonte
0

Casca de peixe

Em Fish shell você tem que enviar para psub . Aqui está um exemplo de comparação de configuração do heroku e dokku com Além da comparação :

bcompare (ssh me@myapp.pl dokku config myapp | sort | psub) (heroku config -a myapp | sort | psub)
    
por WooYek 12.04.2018 / 09:34
fonte