
環境:Windows 11 專業版。
我想msys2
在 git-bash 的 vim 中呼叫 bash,其中兩者共享相同版本的vim
和bash
(儘管這個上下文似乎很奇怪)。
我問一個起源問題在 Vi/Vim SE 中,問題似乎是set -m
在呼叫時沒有選項: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/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 版本來呼叫我機器上的所有 shell,包括 git-bash、pwsh 和 msys2 bash。
問:
恕我直言,看來 git-bash 的 vim 沒有呼叫權限/d/msys64/usr/bin/bash
(但 git-bash 可以)。有沒有一種方法可以直接解決上面的“設備 ioctl 不合適”失敗導致“此 shell 中沒有作業控制”?
已編輯:
被暗示後這個部落格,「設備的 ioctl 不適當」似乎是由於更具體地使用了pipe
as stdin
。通常,ls -al /dev/fd/* -al
在 的頂部~/.bash_profile
會輸出類似/dev/fd/0 -> /dev/pty3
when 的 內容term_start
。但是當使用參數時/d/msys64/usr/bin/bash
它會有/dev/fd/0 -> pipe:[0]
.
然後透過看到這個帖子,這似乎是由於沒有特權。然而 msys2 可以使用/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開發的。這裡就來說明一下問題出在哪裡。如果您也有類似的問題,希望這篇文章可以幫助您。