我怎样才能让这个 bash sub shell 在 Fish 中工作?

How can I get this bash sub shell to work in Fish?

我正在尝试让这个命令行在 Fish 中工作。

git show $(git log --pretty=oneline | fzf | cut -d ' ' -f1)

应该发生的是 git log --pretty=oneline | fzf | cut -d ' ' -f1 让你 select 从 git log 交互地提交,然后 returns 传递给 [=19= 的提交散列].

我以为 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

这是鱼的问题#1362, which is also mentioned in fzf's readme

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

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

(fzf 目前在其 fish 绑定中使用临时文件,但我正在努力纠正)