启动 vim 的 bash 脚本能否中止处于管道中?

Can a bash script that launches vim abort being in a pipeline?

我有一个 bash 脚本,它会在从命令行读取一些输入后为我启动 vim。

我用它来轻松地编辑路径中某处的脚本。它也做一些其他的事情,但最简单的形式如下:

vibin.sh

#!/usr/bin/env bash
PROG=$(which "")
vim "$PROG"

我经常会用它来编辑我最近 运行 的东西,以进行快速调整。 例如,如果我 运行

$ my_script.sh a b c d

我可能会回到历史记录,然后在行首插入 vibin.sh 进行编辑。

$ vibin.sh myscript.sh a b c d

这工作正常,但如果我之前的命令被传送到某些东西,例如

$ vibin.sh myscript.sh a b c d | tee /tmp/out

有没有办法让我的脚本在管道中中止,并让它正常工作?当前 vim 当我这样做时会进入一个奇怪的状态,我可以退出,但我更喜欢更好的解决方案

目前我可以检测到我是否在管道中 运行 并中止,但我实际上想让它做我想做的事 - 编辑脚本!

# ensure we're not in a pipeline
if [ ! -t 1 ] ; then 
  exit 1;
fi

尝试

vim "$PROG" < /dev/tty > /dev/tty

也就是说,强制重定向标准 input/output from/to 当前控制台。针对 pipe/redirects.

的解决方法