
환경: Windows 11 pro.
나는 둘 다 동일한 버전 을 msys2
공유하는 git-bash의 vim에서 bash를 호출하고 싶습니다 (이 컨텍스트는 이상해 보이지만).vim
bash
나는 물었다하나의 기원 질문Vi / Vim SE 에서 문제 는 set -m
. 에 대해 표시됩니다 . 그러나 에 의해 호출되는 하나의 일반 bash에 대해서는 입니다 .:call term_start("/d/msys64/usr/bin/bash -li -vx")
-l
.bash_profile
-i
vim
hivxBH
$-
:call term_start("bash -li -vx")
$-
himvxBH
사용하려고 했는데 -lim -vx
작동하지 않습니다.
위의 작품은 임시로 보여주는 상단에 -l
로 확인되는 작품입니다 .shopt -p login_shell
/etc/profile
shopt -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를 호출하면 하나의 vim 버전을 사용하여 git-bash, pwsh 및 msys2 bash를 포함하여 내 컴퓨터의 모든 쉘을 호출할 수 있습니다.
큐:
IMHO, git-bash의 vim에는 호출 권한이없는 것 같습니다 /d/msys64/usr/bin/bash
(그러나 git-bash는 가능합니다). 방법이 하나 있나요?직접 해결하다위의 '장치에 대한 부적절한 ioctl' 오류로 인해 '이 쉘에 작업 제어가 없음'이 발생합니까?
편집됨:
힌트를 받은 후이 블로그pipe
, '장치에 부적절한 ioctl'을 좀 더 구체적 으로 사용했기 때문인 것 같습니다 stdin
. 일반적으로 ls -al /dev/fd/* -al
상단에는 when
~/.bash_profile
과 같은 내용이 출력됩니다 . 그러나 param을 사용 하면 ./dev/fd/0 -> /dev/pty3
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
따라서 한 가지 해결 방법으로 git-bash가 캡슐화하지 않기 때문에 msys2를 기본 터미널로 사용할 수 있습니다 /dev
.
위의 지저분한 개발 환경은 제가 Windows에서 사용한 임시 환경 중 하나일 뿐입니다(실제로는 사용하지 않는 것이 좋습니다). 일반적으로 저는 Archlinux에서 개발했습니다. 여기서는 문제가 어디에 있는지 보여줍니다. 비슷한 문제가 있는 경우 이 내용이 도움이 되기를 바랍니다.