1
使用具有tty输出的可变命令对stdin和stdout进行配管时,zsh无法输入到终端
系统信息: macOS Sierra 10.12.6 zsh 5.4.2 (x86_64-apple-darwin16.7.0) GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.3.0) 滚动到示例在底部,如果你只是想挖成简单的例子,我做。 注意:我不是一个大zsh用户。 我一直在寻找在fzf按键绑定的bash和zsh。 注意它们都是如何运行可变命令的$(__fzfcmd)。__fzfcmd默认情况下,输出fzf到stdout,并且参数替换仅运行fzf由输出产生的命令()。 bash和zsh脚本之间的区别是,bash另一个脚本通过管道传递输出,$(__fzfcmd)但zsh仅将其捕获到数组中。我的猜测是由于一个问题,zsh当您进一步通过管道传输fzf无法输入的位置的输出时,fzf通过管道传输到的过程fzf不会得到任何标准输入。您唯一的选择是to ^Z或^C。^C由于某种原因,似乎使该过程成为背景。或者,也许他们只是想以阵列的形式使用它们,以便可以在其上运行zle vi-fetch-history。该bash版本在与"\e^": history-expand-line 现在fzf并不重要。似乎您只需要一个输出到的程序tty就可以通过参数替换来调用该程序,从而导致此问题。因此,我将显示一些更简单的示例。 这是一些其他输出到的命令,这些命令tty可能会导致以下问题zsh: vipe(在管道中间运行编辑器) 'vim -' (使vim从stdin读取。类似于vipe,但不会输出到stdout) 在下面的例子中,更换的每次出现vipe用vim -,如果你不想做一个单独的安装。只是要记住,vim -不会像vipe那样将编辑器内容输出到stdout 。 例子: 1) echo 1 | vipe | cat # works in both bash and zsh 2) echo 1 | $(echo …