Normalmente você escreveria:
diff file1 file2
Mas eu gostaria de diferenciar um arquivo e sair do comando (aqui eu faço do comando um trivial):
diff file1 <(cat file2 | sort)
Ok, este trabalho quando eu insiro isso manualmente no prompt do shell, mas quando coloco exatamente a mesma linha no script de shell e, em seguida, executo o script, recebo um erro.
Então, a questão é - como fazer isso corretamente?
Claro que eu gostaria de evitar gravar a saída em um arquivo temporário.
fonte
-R
no caso de utilizargit diff --no-index
diff - file1
.git diff
.git diff
é um animal completamente diferente e opera em referências a objetos glob em seu índice interno, não em arquivos;diff
opera no sistema de arquivos. A-
sintaxe é apenas para o açúcar sintático do shell/dev/stdin
, o arquivo que representa o fluxo STDIN. Portanto, pordiff
que usá-lo como um substituto para um nome de arquivo. Enquanto isso,git diff
não está procurando arquivos, está procurando objetos, então você deve passar algo que ele reconheça. Não o utilize para comparar arquivos, usediff
para isso.O escopo da entrada padrão é o próprio script, portanto, basta colocar seu código dentro de um bloco como este:
Desta forma, o escopo do STDIN está dentro do bloco.
Eu tentei e funciona.
fonte
<(…)
construção. Seu script funcionará ou não, dependendo de você ser executado em um shell compatível<(…)
ou não (ksh93 / bash / zsh vs Bourne / ash / kshk88). A resposta de Caleb diz tudo.