Ошибка использования `/dev/pty` для внешнего msys2 `bash` при вызове его в `vim`, изначально установленном git-bash

Ошибка использования `/dev/pty` для внешнего msys2 `bash` при вызове его в `vim`, изначально установленном git-bash

Среда: Windows 11 pro.

Я хочу вызвать msys2bash в vim git-bash, где оба используют одну и ту же версию vimи bash(хотя этот контекст кажется странным).

Я спросилодин вопрос происхожденияв Vi/Vim SE и проблема, похоже, заключается в отсутствии set -mопции при вызове :call term_start("/d/msys64/usr/bin/bash -li -vx")( -lis to source .bash_profileи т. д. -i, чтобы гарантировать, что мы можем использовать bash в vim) в vim. Это отображается hivxBHдля $-. Но для одного нормального bash, вызванного :call term_start("bash -li -vx"), $-это himvxBH.

Я пробовал использовать, -lim -vxно это не работает.

Вышеуказанные -lработы проверяются shopt -p login_shellнаверху /etc/profileвременно показываемого shopt -s login_shell.


Когда без-m опции мы также получаем следующее сообщение об ошибке (я следовалэто контроль качества. Но я уже использовал -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 для вызова всех оболочек на моей машине, включая git-bash, pwsh и msys2 bash.

В:

IMHO, похоже, что у vim git-bash нет разрешения на вызов /d/msys64/usr/bin/bash(но git-bash может). Есть ли способрешить напрямую суказанная выше ошибка «Неподходящий ioctl для устройства», которая приводит к «отсутствию управления заданиями в этой оболочке»?

Отредактировано:

После того, как мне намекнулиэтот блог, 'Неподходящий ioctl для устройства', похоже, из-за использования 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. Вот, чтобы показать, где проблема. Если у вас есть похожие проблемы, надеюсь, это вам поможет.

Связанный контент