vimdiff pour comparer la sortie au lieu des fichiers

15

J'essaie de comparer deux sorties de commande (aucun fichier)

vimdiff "$(tail /tmp/cachain.pem)" "$(tail /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem)"

J'ai essayé de jouer avec la redirection, le pipe, vim - -cmais je dois manquer quelque chose. Quelqu'un peut-il aider s'il vous plaît ?

Florian Bidabe
la source

Réponses:

23

Vous confondez $(…)avec <(…). Vous avez utilisé l'ancien, qui passe la sortie comme arguments à vimdiff. Par exemple, si la dernière ligne de /path/to/foocontient bar bar bar, la commande suivante

echo $(tail -1 /path/to/foo)

est équivalent à

echo bar bar bar

Au lieu de cela, vous devez utiliser <(…). Ceci est appelé substitution de processus et transmet la sortie sous forme de pseudo-fichier à la vimdiffcommande. Par conséquent, utilisez ce qui suit.

vimdiff <(tail /tmp/cachain.pem) <(tail /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem)

Cela fonctionne dans bash et zsh, mais apparemment il n'y a aucun moyen de faire la substitution de processus dans tcsh.

Sparhawk
la source
ce n'est que dans bash, cependant
simona
@simona Fonctionne aussi pour moi dans zsh. Probablement csh et tcsh également.
Sparhawk
@Sparhawk ça ne marche pas dans tcsh
simona
@simona Merci pour cette information; Je ne connais pas tcsh. Vous pourriez envisager de mettre en place une réponse qui fonctionne dans tsch. À votre santé.
Sparhawk
@Sparhawk apparemment, il n'y a aucun moyen d'y parvenir tcshsans créer un fichier unix.stackexchange.com/questions/5111/…
simona