
Umgebung: Windows 11 Pro.
Ich möchte Bash in Vim von Git-Bash aufrufen, msys2
wobei beide die gleiche Version von vim
und verwenden bash
(obwohl dieser Kontext seltsam zu sein scheint).
Ich fragteeine Ursprungsfragein Vi/Vim SE und das Problem scheint darin zu liegen, dass set -m
beim Aufrufen keine Option vorhanden ist :call term_start("/d/msys64/usr/bin/bash -li -vx")
( -l
ist zur Quelle .bash_profile
usw., -i
um sicherzustellen, dass wir Bash in Vim verwenden können) vim
. Es wird hivxBH
fü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 -l
Arbeiten werden durch die vorübergehende Anzeige shopt -p login_shell
oben überprüft ./etc/profile
shopt -s login_shell
Wenn wir keine -m
Option 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 -i
hinzuzufü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-use
sagt „Ein Job kann gestartet werdenmit dem Terminalemulator verbunden')
Da m
die 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 pipe
as zurückzuführen zu sein. Normalerweise wird oben etwas wie „ wenn“ ausgegeben . Aber bei Verwendung des Parameters wird es „“ anzeigen .stdin
ls -al /dev/fd/* -al
~/.bash_profile
/dev/fd/0 -> /dev/pty3
term_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.