我试图在Fish中使用此命令行。
git show $(git log --pretty=oneline | fzf | cut -d ' ' -f1)
应该发生的是git log --pretty=oneline | fzf | cut -d ' ' -f1
允许您从git log
以交互方式选择提交,然后返回传递给git show
的提交哈希。
我认为Fish使用括号来表示"子命令"但这不起作用。
git show (git log --pretty=oneline | fzf | cut -d ' ' -f1)
它直接转到git show
的默认输出,即HEAD提交。
我怀疑我对shell如何工作的想法是不正确的。任何帮助赞赏。
更新
这是管道的输出
$ git log --pretty=oneline | fzf | cut -d ' ' -f1
3eb7a8fa09ac94cf4a76109b896f7ba58959f5a8
更新2
正如@faho所回答,这是Fish的一个错误。
您现在可以使用临时文件
解决此问题 git log --pretty=oneline | fzf | cut -d ' ' -f1 > $TMPDIR/fzf.result; and git show (cat $TMPDIR/fzf.result)
或者,更简洁地使用xargs
git log --pretty=oneline | fzf | cut -d ' ' -f1 | xargs -o git show
答案 0 :(得分:2)
这是鱼问题#1362,fzf's readme中也提到了这一点。
有一个简单的解决方法:使用read
,而不是命令替换,如
git log --pretty=oneline | fzf | cut -d ' ' -f 1 | read -l answer
git show $answer
(fzf目前在其fish绑定中使用了一个tempfile,但我正在努力纠正它)