Diff sortie de deux programmes sans les fichiers temporaires
Dire que j'ai trop de programmes a
et b
que je peux courir avec ./a
et ./b
.
Est-il possible de diff leurs sorties sans d'abord l'écriture dans les fichiers temporaires?
Vous devez vous connecter pour publier un commentaire.
Utilisation
<(command)
pour passer d'une sortie de la commande vers un autre programme comme s'il s'agissait d'un nom de fichier. Bash tuyaux de sortie du programme à un tuyau et passe un nom de fichier comme/dev/fd/63
à l'extérieur de commande.De même, vous pouvez utiliser
>(command)
si vous voulez des tuyaux quelque chose en une commande.Ce qui est appelé "Processus de Substitution" dans la page de manuel de Bash.
-bash: syntax error near unexpected token ('
. J'ai essayé de nouveau sans parenthèses et a obtenu-bash: java: No such file or directory
. Ne fonctionne pas si la commande comporte des paramètres?alias diffcmd bash -c \'diff \<\(sh -c \!:1\) \<\( sh -c \!:2 \)\'
. (Alors pour, exemple: diffcmd "ls" "ls -a").fseek
, zsh offre=(./a)
qui peut être utilisé de façon identique à<(./a)
mais utilise un fichier temporaire sous le capot, qui zsh va supprimer pour vous.)Ajoutant à la fois les réponses, si vous voulez voir à côté de la comparaison, l'utilisation
vimdiff
:Quelque chose comme ceci:
vimdiff
crée magnifique, intelligente et interactive différence de comparaison de points de vue. Il semble venir avec lavim
paquet sur la plupart des systèmes.vimdiff
montre aussi non seulement la ligne qui diffère, mais aussi les spécificités fragment de texte qui diffère.Une option serait d'utiliser les tubes nommés (Fifo):
... mais Jean Kugelman de la solution est beaucoup plus propre.
rm a_fifo b_fifo
.Pour quiconque est curieux, c'est la façon dont vous effectuez le processus de substitution à l'aide de la Les poissons shell:
Bash:
Poisson:
Malheureusement, la mise en œuvre dans les poissons est actuellement déficientes; poisson soit suspendre ou d'utiliser un fichier temporaire sur le disque. Vous ne pouvez pas utiliser psub pour la sortie de votre commande.
L'ajout d'un peu plus de la déjà de bonnes réponses (aidé moi!):
La commande
docker
sorties de son aide pourSTD_ERR
(c'est à dire descripteur de fichier 2)Je voulais voir si
docker attach
etdocker attach --help
a donné le même résultat$ docker attach
$ docker attach --help
Juste après avoir tapé ces deux commandes, je n'ai suivantes:
$ diff <(!-2 2>&1) <(!! 2>&1)
!! est la même chose que !-1 ce qui signifie que l'exécution de la commande 1 avant cette la dernière commande
!-2 signifie exécutez la commande de deux avant que celui-ci
2>,&1 signifie envoyer file_descriptor 2 sortie (STD_ERR) à la même place que file_descriptor 1 sortie (STD_OUT)
Espère que cela a été d'une certaine utilité.
Pour zsh, à l'aide de
=(command)
crée automatiquement un fichier temporaire et remplace=(command)
avec le chemin d'accès du fichier lui-même. Avec le Processus normal de Substitution,$(command)
est remplacé par le sortie de la commande.Ce zsh fonctionnalité est très utile et peut être utilisé comme donc, pour comparer la sortie de deux commandes à l'aide d'un outil de comparaison, par exemple au-Delà de Comparer:
Pour au-Delà de comparaison, notez que vous devez utiliser
bcomp
pour le dessus (au lieu debcompare
) depuisbcomp
lance la comparaison et attend pour la mener à bien. Si vous utilisezbcompare
, qui lance la comparaison et quitte immédiatement en raison de laquelle les fichiers temporaires créés pour stocker la sortie des commandes disparaissent.Lire la suite ici: http://zsh.sourceforge.net/Intro/intro_7.html
Également remarquer ceci:
et la suivante qui est la différence entre
$(...)
et=(...)
: