Fehler beim Verwenden von `/dev/pty` für eine außerhalb von msys2 `bash` ausgeführte Funktion beim Aufruf in `vim`, das von git-bash inhärent installiert wird

Fehler beim Verwenden von `/dev/pty` für eine außerhalb von msys2 `bash` ausgeführte Funktion beim Aufruf in `vim`, das von git-bash inhärent installiert wird

Umgebung: Windows 11 Pro.

Ich möchte Bash in Vim von Git-Bash aufrufen, msys2wobei beide die gleiche Version von vimund verwenden bash(obwohl dieser Kontext seltsam zu sein scheint).

Ich fragteeine Ursprungsfragein Vi/Vim SE und das Problem scheint darin zu liegen, dass set -mbeim Aufrufen keine Option vorhanden ist :call term_start("/d/msys64/usr/bin/bash -li -vx")( -list zur Quelle .bash_profileusw., -ium sicherzustellen, dass wir Bash in Vim verwenden können) vim. Es wird hivxBHfür angezeigt $-. Aber für eine normale Bash, die von aufgerufen wird :call term_start("bash -li -vx"), $-ist himvxBH.

Ich habe versucht, es zu verwenden -lim -vx, aber das funktioniert nicht.

Die oben genannten -lArbeiten werden durch die vorübergehende Anzeige shopt -p login_shelloben überprüft ./etc/profileshopt -s login_shell


Wenn wir keine -mOption haben, haben wir auch die folgende Fehlermeldung (ich folgtediese Qualitätssicherung. Aber ich habe die Option bereits verwendet und diese Option schlägt fehl , die Option standardmäßig -ihinzuzufügen ) vor der Beschaffung-m/etc/profile

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

Der Schlüsselbegriff ist „Jobsteuerung“, die wichtig ist, damit vim das Terminal darin ausführen kann ( :h terminal-usesagt „Ein Job kann gestartet werdenmit dem Terminalemulator verbunden')

Da mdie Option „Monitor“ entspricht, wo „Jobsteuerung aktiviert“ ist, wie im Handbuch angegeben, liegt hier die Problemquelle.


Diese Frage kannindirekt gelöstindem ich msys2 vim verwende, um git-bash aufzurufen, sodass ich eine Vim-Version verwenden kann, um alle Shells auf meinem Computer aufzurufen, einschließlich git-bash, pwsh und msys2 bash.

Q:

Meiner bescheidenen Meinung nach scheint git-bashs vim nicht die Berechtigung zum Aufrufen zu haben /d/msys64/usr/bin/bash(git-bash kann das aber). Gibt es eine Möglichkeit,lösen Sie direkt mitder oben genannte Fehler „Unangemessenes ioctl für Gerät“, der dazu führt, dass „keine Jobkontrolle in dieser Shell“ vorliegt?

Herausgegeben:

Nach einem Hinweis vondieser Blog, „Unangemessenes ioctl für Gerät“ scheint auf die genauere Verwendung von pipeas zurückzuführen zu sein. Normalerweise wird oben etwas wie „ wenn“ ausgegeben . Aber bei Verwendung des Parameters wird es „“ anzeigen .stdinls -al /dev/fd/* -al~/.bash_profile/dev/fd/0 -> /dev/pty3term_start/d/msys64/usr/bin/bash/dev/fd/0 -> pipe:[0]

Dann durch das Sehendieser Beitrag, es scheint daran zu liegen, dass das Privileg nicht vorhanden ist. Allerdings kann msys2 git-bash mit aufrufen /dev/fd/0 -> /dev/cons3.

Jetzt gelöst:

Das Problem liegt daran, dass msys2 viele Details kapselt und diese nicht von vim, sondern von git-bash manipuliert werden können.

# 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

Als Workaround können wir msys2 als Hauptterminal verwenden, da git-bash nicht kapselt /dev.


Die obige chaotische Entwicklungsumgebung ist nur eine temporäre Umgebung, die ich unter Windows verwendet habe (wirklich nicht zu empfehlen). Normalerweise habe ich unter Archlinux entwickelt. Hier soll gezeigt werden, wo das Problem liegt. Wenn Sie ähnliche Probleme haben, hoffe ich, dass Ihnen dies helfen kann.

verwandte Informationen