vimdiff, um die Ausgabe anstelle von Dateien zu vergleichen

15

Ich versuche zwei Befehlsausgaben zu vergleichen (keine Dateien)

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

Ich habe versucht, mit Umleitung und Pipe zu spielen, vim - -caber mir muss etwas fehlen. Kann jemand bitte helfen?

Florian Bidabe
quelle

Antworten:

22

Sie verwechseln $(…)mit <(…). Sie haben den ersteren verwendet, der die Ausgabe als Argumente an übergibt vimdiff. Wenn zum Beispiel die letzte Zeile von /path/to/fooenthält bar bar bar, dann den folgenden Befehl

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

ist äquivalent zu

echo bar bar bar

Stattdessen müssen Sie verwenden <(…). Dies wird als Prozessersetzung bezeichnet und übergibt die Ausgabe als Pseudodatei an den vimdiffBefehl. Verwenden Sie daher Folgendes.

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

Dies funktioniert in bash und zsh, aber anscheinend gibt es keine Möglichkeit , eine Prozessersetzung in tcsh durchzuführen.

Sparhawk
quelle
Dies ist jedoch nur in Bash
simona
@simona Funktioniert auch für mich in zsh. Wahrscheinlich auch csh und tcsh.
Sparhawk
@ Sparhawk es funktioniert nicht in tcsh
simona
@simona Danke für diese Information; Ich kenne mich nicht mit tcsh aus. Sie könnten überlegen, eine Antwort zu verfassen, die in tsch funktioniert. Prost.
Sparhawk
@ Sparhawk anscheinend gibt es keine Möglichkeit, dies tcshohne die Erstellung einer Datei unix.stackexchange.com/questions/5111/…
simona