如何让这个bash子shell在Fish中工作?

时间:2016-10-18 13:55:45

标签: fish

我试图在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

1 个答案:

答案 0 :(得分:2)

这是鱼问题#1362fzf's readme中也提到了这一点。

有一个简单的解决方法:使用read,而不是命令替换,如

git log --pretty=oneline | fzf | cut -d ' ' -f 1 | read -l answer
git show $answer

(fzf目前在其fish绑定中使用了一个tempfile,但我正在努力纠正它)