vimdiff, aby porównać dane wyjściowe zamiast plików

15

Próbuję porównać dwa dane wyjściowe polecenia (bez plików)

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

Próbowałem grać z przekierowaniem, potokiem, vim - -cale coś mi brakuje. Czy ktoś może pomóc?

Florian Bidabe
źródło

Odpowiedzi:

23

Mylisz się $(…)z <(…). Użyłeś tego pierwszego, który przechodzi na wyjście jako argumenty do vimdiff. Na przykład, jeśli ostatni wiersz /path/to/foozawiera bar bar bar, to następujące polecenie

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

jest równa

echo bar bar bar

Zamiast tego musisz użyć <(…). Nazywa się to substytucją procesu i przekazuje dane wyjściowe jako pseudoplik do vimdiffpolecenia. Dlatego skorzystaj z poniższych.

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

Działa to w bash i zsh, ale najwyraźniej nie ma sposobu na zastąpienie procesu w tcsh.

Krogulec
źródło
jest to jednak tylko bash
simona
@simona Działa również dla mnie w Zsh. Prawdopodobnie również csh i tcsh.
Sparhawk
@Sparhawk to nie działa w tcsh
simona
@simona Dzięki za te informacje; Nie znam tcsh. Możesz rozważyć odpowiedź, która działa w tsch. Twoje zdrowie.
Sparhawk
@Sparhawk najwyraźniej nie ma na to sposobu tcshbez utworzenia pliku unix.stackexchange.com/questions/5111/…
simona