vimdiff сравнивать вывод вместо файлов

15

Я пытаюсь сравнить две команды вывода (без файлов)

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

Я пытался играть с перенаправлением, pipe, vim - -cно я должен что-то упустить. Может кто-нибудь помочь, пожалуйста?

Флориан Бидабе
источник

Ответы:

23

Вы путаете $(…)с <(…). Вы использовали прежние, который проходит выходной сигнал в качестве аргументов в vimdiff. Например, если последняя строка /path/to/fooсодержит bar bar bar, то следующая команда

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

эквивалентно

echo bar bar bar

Вместо этого вам нужно использовать <(…). Это называется замена процесса , и передает выходной сигнал в виде псевдо-файла в vimdiffкоманде. Следовательно, используйте следующее.

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

Это работает в bash и zsh, но, по-видимому, в tcsh нет способа выполнить подстановку процессов.

Sparhawk
источник
это только в bash, хотя
симона
@simona У меня тоже работает в zsh. Вероятно, csh и tcsh также.
Sparhawk
@ Sparhawk это не работает в tcsh
Симона
@simona Спасибо за эту информацию; Я не знаком с tcsh. Вы могли бы рассмотреть возможность размещения ответа, который работает в tsch. Приветствия.
Sparhawk
@Sparhawk, видимо, нет пути к этому tcshбез создания файла unix.stackexchange.com/questions/5111/…
simona