在 git-bash 固有安装的 `vim` 中调用 msys2 `bash` 之外的 `/dev/pty` 时,无法将其用于 msys2 `bash`

在 git-bash 固有安装的 `vim` 中调用 msys2 `bash` 之外的 `/dev/pty` 时,无法将其用于 msys2 `bash`

环境:Windows 11 pro。

我想msys2在 git-bash 的 vim 中调用 bash,其中两者共享相同版本的vimbash(尽管这种上下文看起来很奇怪)。

我问一个起源问题set -m在 Vi/Vim SE 中,问题似乎是在 中调用:call term_start("/d/msys64/usr/bin/bash -li -vx")(-l是 source .bash_profile,等等,-i是为了确保我们可以在 vim 中使用 bash )时没有选项vim。它显示hivxBH$-。但对于 调用的一个正常 bash 来说:call term_start("bash -li -vx")$-himvxBH

我尝试过使用-lim -vx但是没有用。

以上-l作品经审核,暂时不shopt -p login_shell展示。/etc/profileshopt -s login_shell


当没有-m选项时,我们也会出现以下错误消息(我遵循这个QA。但我已经使用过选项,并且此选项默认-i无法添加选项)在采购之前-m/etc/profile

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell

关键术语是“作业控制”,这对于 vim 在内部运行终端非常重要(:h terminal-use说'可以开始工作连接到终端仿真器')

由于m选项对应于‘监视’,其中‘作业控制已启用’,如手册所述,所以它是问题的根源。


这个问题可以间接解决通过使用 msys2 vim 调用 git-bash,这样我就可以使用一个 vim 版本来调用我的机器上的所有 shell,包括 git-bash、pwsh 和 msys2 bash。

问:

在我看来,git-bash 的 vim 似乎没有调用权限/d/msys64/usr/bin/bash(但 git-bash 可以)。有没有办法直接求解上述‘设备的 ioctl 不适当’失败导致‘此 shell 中没有作业控制’?

已编辑

在被暗示之后这个博客, 'Inappropriate ioctl for device' 似乎是由于更具体地使用pipeas造成的stdin。通常,ls -al /dev/fd/* -al在 的顶部~/.bash_profile会输出类似/dev/fd/0 -> /dev/pty3when 的 内容term_start。但是当使用 param 时,/d/msys64/usr/bin/bash它将具有/dev/fd/0 -> pipe:[0]

然后通过看到这个帖子,这似乎是由于没有权限。但是 msys2 可以使用 调用 git-bash /dev/fd/0 -> /dev/cons3

现在解决了

问题是由于msys2封装了很多细节,无法通过vim进行操作,但是可以通过git-bash进行操作。

# git bash try to call msys2 bash
# here although the administrator has the rwx mode, using as one administrator can't solve the problem.
$ ls -al /d/msys64/dev/
total 4
drwxr-xr-x 1 foo 197609 0 Mar 28 16:59 ./
drwxr-xr-x 1 foo 197609 0 Apr  4 16:29 ../
drwxr-xr-x 1 foo 197609 0 Mar 28 16:59 mqueue/
drwxr-xr-x 1 foo 197609 0 Mar 28 16:59 shm/
# msys2 bash try to call git bash
$ ls -al /d/Git/dev/
total 8
drwxr-xr-x 1 foo foo  0 Apr  2 09:53 .
drwxr-xr-x 1 foo foo  0 Apr  2 09:53 ..
lrwxrwxrwx 1 foo foo 13 Apr  2 09:53 fd -> /proc/self/fd
drwxr-xr-x 1 foo foo  0 Apr  2 09:52 mqueue
drwxr-xr-x 1 foo foo  0 Apr  2 09:52 shm
lrwxrwxrwx 1 foo foo 15 Apr  2 09:53 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 foo foo 15 Apr  2 09:53 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 foo foo 15 Apr  2 09:53 stdout -> /proc/self/fd/1

因此,对于一个解决方法,我们可以使用 msys2 作为主终端,因为 git-bash 没有封装/dev


上面这个乱七八糟的开发环境只是我在 Windows 下临时用的一个环境(真的不推荐用),平时都是在 Archlinux 上开发,这里就给大家展示一下问题出在哪里,如果你也有类似的问题,希望可以帮到你。

相关内容