Normalement, vous écririez:
diff file1 file2
Mais je voudrais différencier un fichier et sortir de la commande (ici, je fais une commande triviale):
diff file1 <(cat file2 | sort)
Ok, ce travail lorsque je le saisis manuellement à l'invite du shell, mais lorsque je mets exactement la même ligne dans le script shell, puis que j'exécute le script, j'obtiens une erreur.
Donc, la question est - comment faire cela correctement?
Bien sûr, je voudrais éviter d'écrire la sortie dans un fichier temporaire.
la source
-R
en cas d'utilisationgit diff --no-index
diff - file1
.git diff
.git diff
est une bête complètement différente et fonctionne sur les références aux objets glob dans son index interne, pas sur les fichiers;diff
fonctionne sur le système de fichiers. La-
syntaxe n'est que du sucre syntaxique shell pour/dev/stdin
, le fichier représentant le flux STDIN. Par conséquent, pourquoidiff
peut-il l'utiliser comme substitut d'un nom de fichier. Pendant ce temps, ilgit diff
ne recherche pas de fichiers, il recherche des objets, vous devez donc lui transmettre quelque chose qu'il reconnaît. Ne l'utilisez pas pour comparer des fichiers entre eux, utilisezdiff
pour cela.La portée de l'entrée standard est le script lui-même, alors mettez simplement votre code dans un bloc comme celui-ci:
De cette façon, la portée du STDIN est à l'intérieur du bloc ..
J'ai essayé et ça marche.
la source
<(…)
construction. Votre script fonctionnera ou ne fonctionnera pas selon que vous l'exécutez dans un shell qui prend en charge<(…)
ou non (ksh93 / bash / zsh vs Bourne / ash / kshk88). La réponse de Caleb résume tout.