我正在尝试比较两个命令输出(无文件)
vimdiff "$(tail /tmp/cachain.pem)" "$(tail /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem)"
我尝试使用重定向、管道,vim - -c
但我一定错过了一些东西。有人可以帮忙吗?
答案1
你$(…)
对感到困惑<(…)
。您使用了前者,它将输出传递为论点到vimdiff
。例如,如果最后一行/path/to/foo
contains 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
。
答案2
在fish
壳, 这psub
命令执行进程替换,所以你的例子是:
vimdiff (tail /tmp/cachain.pem | psub) (tail /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem | psub)
顺便说一句,我认为编辑一个文件与该文件的特定 Git 版本相比是进程替换和vimdiff
.定义(在fish
语法中,但很容易适应 POSIX shell 语法)
function vimgitdiff
vimdiff $argv[1] (git show $argv[2]:$argv[1] | psub)
end
然后打电话
vimgitdiff path/to/file branch-name
打开左侧工作树中的当前状态,右侧工作树中的当前Vim
状态。path/to/file
branch-name