git-bash によってインストールされた `vim` で呼び出すときに、msys2 `bash` の外部で `/dev/pty` を使用できない

git-bash によってインストールされた `vim` で呼び出すときに、msys2 `bash` の外部で `/dev/pty` を使用できない

環境: Windows 11 pro。

git-bash の vim で bashを呼び出したいのですmsys2が、両方が同じバージョンの と を共有していますvim(bashただし、このコンテキストは奇妙に思えます)。

私は尋ねた起源に関する一つの疑問Vi/Vim SE では、 で(は source などへの呼び出しで、は vim で bash を使用できるようにするため) をset -m呼び出すときにオプションがないことが問題のようです。の場合は と表示されます。しかし、によって呼び出される通常の bash の場合はです。:call term_start("/d/msys64/usr/bin/bash -li -vx")-l.bash_profile-ivimhivxBH$-: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 を呼び出すことで、1 つの vim バージョンを使用して、git-bash、pwsh、msys2 bash を含むマシン上のすべてのシェルを呼び出すことができます。

質問:

私の意見では、git-bashのvimには呼び出す権限がないようです/d/msys64/usr/bin/bash(git-bashはできます)。直接解決する上記の「デバイスに対する不適切な ioctl」の失敗により、「このシェルではジョブ制御がありません」というエラーが発生しますか?

編集済み:

ヒントを受けてこのブログpipe, 「デバイスに対する不適切な ioctl」は、より具体的には を使用しているために発生するようですstdin。通常、ls -al /dev/fd/* -alの先頭では、の場合 ~/.bash_profileのように出力されます。ただし、 パラメータを使用すると、になります。/dev/fd/0 -> /dev/pty3term_start/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

したがって、回避策の 1 つとして、git-bash は をカプセル化しないため、msys2 をメイン ターミナルとして使用できます/dev


上記の乱雑な開発環境は、私が Windows で使用した一時的な環境の 1 つにすぎません (実際には使用はお勧めしません)。通常、私は Arch Linux で開発しました。ここでは、問題がどこにあるかを示します。同様の問題がある場合は、これが役立つことを願っています。

関連情報