MSYS2에서 기본 쉘 변경


14

MSYS2의 기본 쉘을에서 bash로 변경하고 싶습니다 zsh.

시도 chsh했습니다-MSYS2에서 사용할 수 없습니다.
편집 /etc/passwd은 아무것도하지 않습니다. 무시되는 것 같습니다.

MSYS2의 루트 디렉토리에있는 배치 스크립트를 살펴보고 bash하드 코딩했습니다. MinGW를 사용하려고 시도 할 때까지 every /usr/bin/bash로 변경되었습니다 /usr/bin/zsh.

가능하다면 MSYS2의 쉘을 어디에서 적절하게 변경할 수 있습니까?

답변:


8

나는이 문제에 부딪쳤다. zsh를 실행하려면 다음을 수행하십시오.

  • MSYS2 설치
  • MSYS2를 설치 한 디렉토리에서 mingw32_shell.bat
  • 다음을 실행하여 설치된 모든 패키지를 업그레이드했습니다. pacman -Syu
  • 다음을 실행하여 zsh 및 curl 설치 pacman -Sy zsh curl
  • 실행하여는 MinGW 쉘 닫힌 exit- 나는 실행되지 않은 zsh설치 후 즉시.
  • msys2_shell.bat, mingw32_shell.bat 및 mingw64_shell.bat를 편집하고 모든 인스턴스를 다음 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
  • zsh 구성 메뉴 0에서 .zshrc 파일을 작성하도록 선택 합니다.

구성이 완료되면 다음을 보았습니다.

zsh-newuser-install:1119: command not found: rm

rm건강 하지 않은 * nix 시스템에서 그물을 발견해서는 안되기 때문에 (MSYS2의 zsh 패키지의 버그라고 생각합니다) 그 이후에는 모든 것이 잘 작동했습니다.

새 세션을 만들기 위해 배치 파일을 열었을 때 이것을 처음 시도했을 때 이미 채워진 zsh의 메모리 공간에 대한 오류가 발생했습니다. 이 문제를 해결하기 위해 열려있는 모든 MinTTY 창을 닫고 autorebase.batMSYS2 설치 디렉토리에서 파일을 실행했습니다 . 그 후 모든 것이 효과가있었습니다.

그런 다음 oh-my-zsh를 설치했습니다. 사용 :

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"


기본적 으로이 방법을 시도했지만 오류없이 물고기를 작동시킬 수 없었습니다.
leetNightshade

1
rm실제로 정말 결백하다. /usr/share/zsh/functions/Newuser/zsh-newuser-install스크립트 의 끝에는 rm -f $tmpfile*자체 정리 가 포함되어 있습니다. Fedora 설치의 current와 정확히 동일 /usr/share/zsh/5.7.1/functions/zsh-newuser-install합니다.
FeRD

24

.exe배치 파일이 아닌 실행기 를 제공하는 최신 msys2-launcher를 사용 하여이 문제를 해결했습니다 .

이를 위해 .iniMsys2 루트 디렉토리 내부의 런처와 함께 파일 을 변경하기 만하면됩니다 (64 비트 설치의 경우 msys2.ini, mingw32.ini및을 포함 할 수 있음 mingw64.ini). 해당 ini 파일 각각에 대해 쉘을 설정하는 행을 추가하십시오.

SHELL=/usr/bin/zsh

이것은 zsh쉘로 설정하는 직접적인 방법 입니다. oh-my-zsh 를 설정하기 위해이 방법을 고려할 수 있습니다 - skel부분은 내가 본 한 msys2에 실제로 적용되지 않습니다.
TNT

1
2018 년 7 월 기준으로 최신 msys2에 대한 정답입니다. 허용 된 답변이 더 이상 작동하지 않습니다.
GaryO

더 이상 작동하지 않음 (14/03/19)
letroll March

5

편집 /etc/nsswitch.conf하고 아래 설정을 변경하십시오.

db_shell: /bin/zsh

이것은 작동하지만 Alan Pearce 솔루션의 다소 해킹 된 버전 인 것 같습니다.
TNT

나는 물고기를 사용하려고 노력할 수 없었다.
leetNightshade

이 답변도 여기에서 발견했습니다 : github.com/elieux/msys2-launcher/issues/… Alan Pearce의 답변이 더 좋아 보입니다. 두 작품 불구하고, 그리고 당신은 또한 내부 쉘 설정할 수 있습니다 msys2_shell.cmd박쥐 파일을,하지만 그것을 변경 .cmd당신이 중 하나에서 시작해야하는 경우 파일은 쉘에 영향을주지 않습니다 .exe
호세

4

기본 쉘 변경이 지원되지 않는 경우 원하는 쉘을 사용하는 한 가지 방법은 기본 쉘이 시작될 때 즉시 시작하는 것입니다.

예를 들어, 단지 쓰기 zsh~/.bashrc, 때 떠들썩한 파티가 시작되면 당신을 위해 zsh을 실행합니다. 길 잃은 bash 프로세스가 실행되는 동안 로그 아웃 할 때 쉘을 두 번 종료해야합니다. 더 나은 방법으로, exec zsh대신 zshbash 프로세스를 zsh 프로세스로 완전히 대체하십시오.

이 방법은 완벽하지는 않지만 대부분의 경우 잘 작동합니다. 하드 코딩 된 값 변경과 비교할 때 호환성 문제가 덜 발생할 수 있습니다.

이 답변에서 StackOverflow에 처음 언급되었습니다 .


이것에 대해 좋은 점이나 멋진 점은 없지만 최소한의 소란으로 작동합니다.
leetNightshade

3

않았다 설치 내 되지 허용 대답에 언급 된 파일이 ( msys2_shell.bat, mingw32_shell.bat, 및 mingw64_shell.bat).

대신 MSYS2의 Win10 시스템 설치 (설치 프로그램 파일 사용 msys2-x86_64-20161025.exe)에는 다음과 같은 단일 파일 msys2_shell.cmd이 있습니다.

set "LOGINSHELL=bash"

로 변경 bash했습니다 zsh. 지금까지 작동하는 것 같습니다.


귀하의 솔루션이 Win7에서 저에게 효과가 없었습니다. 그 후에 다른 일을 했습니까?
letroll

1
죄송합니다. 추가 정보가 없습니다. 나는 WSL로 넘어 갔다. 행운을 빕니다.
xtian

이것은 win10에서 나를 위해 일했습니다
Jose

당신이 중 하나에서 msys2를 시작해야하지만 경우 .exe앨런 피어스의 대답에 그보기를 위해,이 쉘을 설정하지 않습니다 파일
호세

1

해결책이 있지만 현재 사용중인 다른 터미널 대신 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에는 많은 옵션이 있으므로 원하는대로 설정할 수 있습니다.


0

최신 설치에서는 msys2_shellMSYS2 환경을 시작하기 위해 Windows에 설치된 명령이 -shell인수를 허용 하기 때문에 MSYS2는 분명히 설정을 계속 변경 합니다 .

따라서 다른 쉘을 사용하기 위해 MSYS2 / MinGW 32 / MinGW 64에 대한 하나 이상의 런처 속성을 편집하고 추가 -shell zsh하거나 기타 대상을 업데이트 할 수 있습니다 . (쉘이 $PATHMSYS 환경에 충분하다면 전체 경로가 필요하지 않습니다.)

예를 들어, Win7 시작 메뉴의 "MSYS2 64 비트"에있는 "MSYS2 MinGW 64 비트"실행기 :

전에
표적: C:\msys64\msys2_shell.cmd -mingw64
표적: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh

변경 사항이 업그레이드 등으로 지워지지 않기 때문에 영구적으로 전환하는 가장 쉽고 호환 가능한 방법 인 것 같습니다.

이상하게도 런처는 환경 변수, 레지스트리 항목 등을 존중하지 않습니다 -shell. 명령 행에서이를 대체하기 위해 전달 하지 않는 한 LOGINSHELL=bash초기에 강제로 실행되는 기본값이 사용됩니다.


0

편집 : 아래는 이전 버전의 MSYS2에 적용됩니다. 2020-01-21 현재는 더 이상 필요하지 않습니다. FeRD의 답변이 가장 효과가있는 것 같습니다.

나는 배쉬 대신 물고기를 사용하고 싶었다. 불행히도 여기서 대부분의 방법은 작동하지 않았습니다. 어류 구문이 너무 다르기 때문일 수 있습니다.

가장 효과적인 exec fish것은 배쉬가 시작될 때 가장 먼저 실행 되는 것에 대한 wzhd의 아이디어였습니다 . 그러나 여전히 문제가있었습니다 : bash를 사용하려면 .bashrc물고기에서 실행하더라도 다른 물고기 인스턴스를 시작하기 때문에 해당 줄을 제거 하도록 편집 해야했습니다.

가장 좋은 방법은 exec fishmsys2가 시작될 때 실행되지만 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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.