답변:
나는이 문제에 부딪쳤다. zsh를 실행하려면 다음을 수행하십시오.
mingw32_shell.bat
pacman -Syu
pacman -Sy zsh curl
exit
- 나는 실행되지 않은 zsh
설치 후 즉시.start %WD%mintty -i /msys2.ico /usr/bin/bash --login %*
으로 변경
했습니다 :
start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %*
(2015-09-23 현재 39 행)mingw32_shell.bat
0
에서 .zshrc 파일을 작성하도록 선택 합니다.구성이 완료되면 다음을 보았습니다.
zsh-newuser-install:1119: command not found: rm
rm
건강 하지 않은 * nix 시스템에서 그물을 발견해서는 안되기 때문에 (MSYS2의 zsh 패키지의 버그라고 생각합니다) 그 이후에는 모든 것이 잘 작동했습니다.
새 세션을 만들기 위해 배치 파일을 열었을 때 이것을 처음 시도했을 때 이미 채워진 zsh의 메모리 공간에 대한 오류가 발생했습니다. 이 문제를 해결하기 위해 열려있는 모든 MinTTY 창을 닫고 autorebase.bat
MSYS2 설치 디렉토리에서 파일을 실행했습니다 . 그 후 모든 것이 효과가있었습니다.
그런 다음 oh-my-zsh를 설치했습니다. 사용 :
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
rm
실제로 정말 결백하다. /usr/share/zsh/functions/Newuser/zsh-newuser-install
스크립트 의 끝에는 rm -f $tmpfile*
자체 정리 가 포함되어 있습니다. Fedora 설치의 current와 정확히 동일 /usr/share/zsh/5.7.1/functions/zsh-newuser-install
합니다.
.exe
배치 파일이 아닌 실행기 를 제공하는 최신 msys2-launcher를 사용 하여이 문제를 해결했습니다 .
이를 위해 .ini
Msys2 루트 디렉토리 내부의 런처와 함께 파일 을 변경하기 만하면됩니다 (64 비트 설치의 경우 msys2.ini
, mingw32.ini
및을 포함 할 수 있음 mingw64.ini
). 해당 ini 파일 각각에 대해 쉘을 설정하는 행을 추가하십시오.
SHELL=/usr/bin/zsh
편집 /etc/nsswitch.conf
하고 아래 설정을 변경하십시오.
db_shell: /bin/zsh
msys2_shell.cmd
박쥐 파일을,하지만 그것을 변경 .cmd
당신이 중 하나에서 시작해야하는 경우 파일은 쉘에 영향을주지 않습니다 .exe
들
기본 쉘 변경이 지원되지 않는 경우 원하는 쉘을 사용하는 한 가지 방법은 기본 쉘이 시작될 때 즉시 시작하는 것입니다.
예를 들어, 단지 쓰기 zsh
에 ~/.bashrc
, 때 떠들썩한 파티가 시작되면 당신을 위해 zsh을 실행합니다. 길 잃은 bash 프로세스가 실행되는 동안 로그 아웃 할 때 쉘을 두 번 종료해야합니다. 더 나은 방법으로, exec zsh
대신 zsh
bash 프로세스를 zsh 프로세스로 완전히 대체하십시오.
이 방법은 완벽하지는 않지만 대부분의 경우 잘 작동합니다. 하드 코딩 된 값 변경과 비교할 때 호환성 문제가 덜 발생할 수 있습니다.
이 답변에서 StackOverflow에 처음 언급되었습니다 .
않았다 설치 내 되지 허용 대답에 언급 된 파일이 ( msys2_shell.bat
, mingw32_shell.bat
, 및 mingw64_shell.bat
).
대신 MSYS2의 Win10 시스템 설치 (설치 프로그램 파일 사용 msys2-x86_64-20161025.exe
)에는 다음과 같은 단일 파일 msys2_shell.cmd
이 있습니다.
set "LOGINSHELL=bash"
로 변경 bash
했습니다 zsh
. 지금까지 작동하는 것 같습니다.
.exe
앨런 피어스의 대답에 그보기를 위해,이 쉘을 설정하지 않습니다 파일
해결책이 있지만 현재 사용중인 다른 터미널 대신 ConEmu 를 사용해야 합니다. 내 의견으로는 Windows에서 최고의 터미널 앱이라고 시도해보십시오.
우선, pacman을 사용하여 zsh를 설치해야합니다. 나는 당신이 이미 그렇게했다고 생각합니다. 그런 다음, ChocolateE를 사용하거나 conemu 사이트에서 설치 프로그램을 다운로드하여 ConEmu를 설치해야합니다. ConEmu 설정의 '작업'에서 새 작업을 추가해야합니다. 아마 이미 하나 Bash::Msys2-64
또는 그와 비슷한 것을 가지고 있기 때문에 아마도 하나를 호출 할 것 Zsh::Msys2-64
입니다. 어떤 경우에도 이름은 임의적입니다. 이 새 작업의 '명령'상자에서 기본적으로 명령을 복사하고 적절한 위치 에서 Bash::Msys2-64
대체 할 수 있습니다 zsh.exe
. 광산은 다음과 같습니다
set CHERE_INVOKING=1 & %ConEmuDrive%\msys64\usr\bin\zsh.exe --login -i -new_console:C:"%ConEmuDrive%\msys64\msys2.ico"
그런 다음 ConEmu의 '시작'옵션에서이를 시작 작업으로 설정하여 ConEmu를 열 때마다 Zsh로 바로 이동할 수 있습니다. 분명히 새 탭이나 원하는대로 키 콤보를 열거 나 다른 작업을 열 수 있습니다. ConEmu에는 많은 옵션이 있으므로 원하는대로 설정할 수 있습니다.
최신 설치에서는 msys2_shell
MSYS2 환경을 시작하기 위해 Windows에 설치된 명령이 -shell
인수를 허용 하기 때문에 MSYS2는 분명히 설정을 계속 변경 합니다 .
따라서 다른 쉘을 사용하기 위해 MSYS2 / MinGW 32 / MinGW 64에 대한 하나 이상의 런처 속성을 편집하고 추가 -shell zsh
하거나 기타 대상을 업데이트 할 수 있습니다 . (쉘이 $PATH
MSYS 환경에 충분하다면 전체 경로가 필요하지 않습니다.)
예를 들어, Win7 시작 메뉴의 "MSYS2 64 비트"에있는 "MSYS2 MinGW 64 비트"실행기 :
표적: C:\msys64\msys2_shell.cmd -mingw64
표적: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh
변경 사항이 업그레이드 등으로 지워지지 않기 때문에 영구적으로 전환하는 가장 쉽고 호환 가능한 방법 인 것 같습니다.
이상하게도 런처는 환경 변수, 레지스트리 항목 등을 존중하지 않습니다 -shell
. 명령 행에서이를 대체하기 위해 전달 하지 않는 한 LOGINSHELL=bash
초기에 강제로 실행되는 기본값이 사용됩니다.
편집 : 아래는 이전 버전의 MSYS2에 적용됩니다. 2020-01-21 현재는 더 이상 필요하지 않습니다. FeRD의 답변이 가장 효과가있는 것 같습니다.
나는 배쉬 대신 물고기를 사용하고 싶었다. 불행히도 여기서 대부분의 방법은 작동하지 않았습니다. 어류 구문이 너무 다르기 때문일 수 있습니다.
가장 효과적인 exec fish
것은 배쉬가 시작될 때 가장 먼저 실행 되는 것에 대한 wzhd의 아이디어였습니다 . 그러나 여전히 문제가있었습니다 : bash를 사용하려면 .bashrc
물고기에서 실행하더라도 다른 물고기 인스턴스를 시작하기 때문에 해당 줄을 제거 하도록 편집 해야했습니다.
가장 좋은 방법은 exec fish
msys2가 시작될 때 실행되지만 bash가 시작될 때마다 실행 되도록하는 것입니다 .
내가 찾은 방법 msys2_shell.cmd
은 msys2의 설치 폴더에 있는 파일 을 통하는 것입니다. 이 줄을 찾았습니다.
set SHELL_ARGS=
:collectparams
if not "x%~1" == "x" set SHELL_ARGS=%SHELL_ARGS% %1& shift& goto :collectparams
시작하자마자 bash에 전달할 매개 변수를 정의하는 것처럼 보이지만 (이와 달리 .bashrc
) 이 스크립트가 실행될 때만 가능 합니다. 그래서 나는이 줄을 다음과 같이 추가했습니다.
set SHELL_ARGS=%SHELL_ARGS% -c "exec fish"
지금까지 모든 것이 괜찮은 것 같습니다. msys2를 시작하면 전자가 로딩을 완료하자마자 bash를 fish로 대체하지만 bash 명령 줄이 필요한 경우 여전히로 시작할 수 있습니다 bash
.