เปลี่ยนเชลล์เริ่มต้นบน MSYS2


14

ฉันต้องการที่จะเปลี่ยนเปลือกเริ่มต้น MSYS2 จากไปbashzsh

ฉันได้ลองchsh- ไม่มีใน MSYS2
การแก้ไข/etc/passwdไม่ทำอะไรเลย ดูเหมือนว่าจะถูกละเว้น

ฉันดูที่สคริปต์แบทช์ในไดเรกทอรีรากของ MSYS2 และbashฮาร์ดโค้ดในฉันเปลี่ยนทุกอย่างเป็น/usr/bin/bashไป/usr/bin/zshได้ซึ่งทำงานได้ดีจนกระทั่งฉันลองใช้ MinGW

ฉันจะเปลี่ยนกระสุนของ MSYS2 ได้อย่างถูกต้องหากเป็นไปได้?

คำตอบ:


8

ฉันเพิ่งพบปัญหานี้ เพื่อให้ทำงาน zsh ฉันได้ทำสิ่งนี้:

  • ติดตั้ง MSYS2
  • จากไดเรกทอรีที่ฉันติดตั้ง MSYS2 ฉันวิ่ง mingw32_shell.bat
  • อัปเกรดแพคเกจที่ติดตั้งทั้งหมดโดยการเรียกใช้ pacman -Syu
  • ติดตั้ง zsh และ curl โดยเรียกใช้ pacman -Sy zsh curl
  • ปิด MinGW shell ด้วยการรัน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 %* (บนบรรทัด 39 ณ 2015-09-23)
  • Ran mingw32_shell.bat
  • ที่เมนูการกำหนดค่า zsh ฉันเลือกที่0จะสร้างไฟล์. zshrc

เมื่อตั้งค่าเสร็จฉันเห็น:

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

ซึ่งไม่ถูกต้อง ... เนื่องจากrmไม่ควรพบสุทธิในระบบ * ที่ดีต่อสุขภาพ (ฉันเดาว่ามันเป็นปัญหากับแพ็คเกจ zsh ของ MSYS2) แต่ทุกอย่างก็ทำงานได้ดีหลังจากนั้น

ครั้งแรกที่ฉันลองทำสิ่งนี้เมื่อฉันเปิดไฟล์แบตช์เพื่อสร้างเซสชันใหม่ฉันได้รับข้อผิดพลาดเกี่ยวกับพื้นที่หน่วยความจำของ zsh ที่ถูกครอบครองอยู่แล้ว ในการแก้ไขปัญหานี้ฉันปิดหน้าต่าง MinTTY ที่เปิดอยู่ทั้งหมดและเรียกใช้autorebase.batไฟล์ในไดเรกทอรีการติดตั้ง MSYS2 ทุกอย่างทำงานหลังจากนั้น

จากนั้นฉันติดตั้ง 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 /usr/share/zsh/5.7.1/functions/zsh-newuser-installติดตั้งของฉันปัจจุบัน
FeRD

24

ฉันพบสิ่งนี้โดยใช้ msys2-launcher ที่ใหม่กว่าซึ่งให้.exeตัวเรียกใช้แทนไฟล์แบตช์

สำหรับเรื่องนี้มันเป็นเพียงเรื่องของการเปลี่ยนแปลงที่.iniไฟล์ข้างปืนกลภายในไดเรกทอรีราก Msys2 (สำหรับการติดตั้งแบบ 64 บิตอาจมีmsys2.ini, mingw32.iniและmingw64.ini) สำหรับแต่ละไฟล์ ini เหล่านั้นให้เพิ่มบรรทัดเพื่อตั้งค่าเชลล์:

SHELL=/usr/bin/zsh

นี่เป็นวิธีโดยตรงในการตั้งzshเป็นเปลือก สำหรับการตั้งค่าOh-My-zshหนึ่งอาจพิจารณาวิธีการนี้ - เดอะskelส่วนหนึ่งไม่ได้จริงๆนำไปใช้กับ msys2 เท่าที่ผมเห็น
TNT

1
นี่คือคำตอบที่ถูกต้องสำหรับ msys2 ที่ใหม่กว่า ณ เดือนกรกฎาคม 2018 คำตอบที่ได้รับการยอมรับใช้งานไม่ได้อีกต่อไป
GaryO

ไม่ทำงานอีกต่อไป (14/03/19)
letroll

5

แก้ไข/etc/nsswitch.confและเปลี่ยนการตั้งค่าด้านล่าง:

db_shell: /bin/zsh

วิธีนี้ใช้ได้ผล แต่ดูเหมือนจะเป็นวิธีที่แก้ปัญหาของ Alan Pearce ได้ค่อนข้างดี
TNT

ฉันไม่สามารถใช้มันในการพยายามใช้ปลา
leetNightshade

ฉันพบคำตอบนี้ที่นี่เช่นกัน: github.com/elieux/msys2-launcher/issues/…แต่คำตอบของ Alan Pearce นั้นดูดีกว่า ทั้งสองงาน แต่และคุณยังสามารถตั้งค่าเปลือกภายในmsys2_shell.cmdไฟล์ค้างคาว แต่เปลี่ยนใน.cmdไฟล์ไม่ได้ส่งผลกระทบต่อเปลือกถ้าคุณต้องเริ่มต้นจากหนึ่งใน.exes
โฮเซ่

4

เมื่อเปลี่ยนเชลล์เริ่มต้นไม่ได้รับการสนับสนุนวิธีหนึ่งในการใช้เชลล์ที่คุณชอบคือเริ่มต้นทันทีเมื่อเชลล์เริ่มต้นเริ่มต้น

ตัวอย่างเช่นเพียงแค่เขียนzshถึง~/.bashrcและเมื่อ bash เริ่มทำงานมันจะรัน zsh ให้คุณ กระบวนการทุบตีหลงทางนั้นยังคงทำงานต่อไปและคุณต้องออกจาก shell สองครั้งเมื่อออกจากระบบ เพื่อให้ดีขึ้นเขียนexec zshแทนzshวิธีนี้กระบวนการทุบตีจะถูกแทนที่ด้วยกระบวนการ zsh

วิธีนี้ไม่สมบูรณ์ แต่ควรทำงานได้ดีในกรณีส่วนใหญ่ เมื่อเทียบกับการเปลี่ยนค่าฮาร์ดโค้ดอาจทำให้เกิดปัญหาความเข้ากันได้น้อยลง

มันเป็นครั้งแรกในคำตอบนี้ใน StackOverflow


ไม่มีอะไรดีหรือแฟนซีเกี่ยวกับเรื่องนี้ แต่มันใช้ได้กับความยุ่งยากน้อยที่สุด
leetNightshade

3

ติดตั้งของฉันไม่ได้มีไฟล์ที่ระบุไว้ในคำตอบที่ได้รับการยอมรับ ( msys2_shell.bat, mingw32_shell.batและmingw64_shell.bat)

แต่การติดตั้งระบบ Win10 ของฉันของMSYS2 (โดยใช้ไฟล์ตัวติดตั้งmsys2-x86_64-20161025.exe) มีไฟล์เดียวโดยmsys2_shell.cmdมีบรรทัด:

set "LOGINSHELL=bash"

ผมเปลี่ยนไปbash zshดูเหมือนว่าจะทำงานจนถึงตอนนี้


โซลูชันของคุณไม่ทำงานสำหรับฉันใน Win7 คุณทำสิ่งอื่นหลังจากนั้นหรือไม่
letroll

1
ขออภัยฉันไม่มีข้อมูลเพิ่มเติม ฉันย้ายไปที่ WSL ซึ่งเหมาะกับความต้องการของฉัน โชคดี.
xtian

สิ่งนี้ใช้ได้กับฉันใน win10
Jose

อย่างไรก็ตามหากคุณต้องการเริ่มต้น msys2 จาก.exeไฟล์ใดไฟล์หนึ่งนี่จะไม่ตั้งค่าเชลล์เพื่อดูคำตอบของ Alan Pearce
Jose

1

ฉันมีวิธีแก้ปัญหา แต่คุณต้องใช้ConEmuแทนเทอร์มินัลอื่นที่คุณใช้อยู่ในปัจจุบัน ลองใช้ดูสิในความคิดของฉันมันเป็นแอพเทอร์มินัลที่ดีที่สุดบน windows

ก่อนอื่นคุณจะต้องติดตั้ง zsh โดยใช้ pacman ฉันเดาว่าคุณผ่านไปได้แล้ว จากนั้นคุณจะต้องติดตั้ง ConEmu (ซึ่งคุณสามารถทำได้ด้วย Chocolatey หรือเพียงแค่ดาวน์โหลดตัวติดตั้งจากไซต์ conemu) ในการตั้งค่า ConEmu ภายใต้ 'Tasks' คุณควรเพิ่มงานใหม่ มันอาจจะมีอยู่แล้วหนึ่งเรียกว่าหรือสิ่งที่ต้องการดังนั้นบางทีคุณอาจจะทำให้ใครคนหนึ่งที่เรียกว่า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 devs เปลี่ยนการตั้งค่าอย่างต่อเนื่องเพราะในการติดตั้งใหม่ล่าสุดmsys2_shellคำสั่งที่ติดตั้งใน Windows เพื่อเปิดใช้งานสภาพแวดล้อม MSYS2 ยอมรับการ-shellโต้แย้ง

ดังนั้นในการใช้เชลล์ที่แตกต่างกันคุณสามารถแก้ไขคุณสมบัติของตัวเรียกใช้งานอย่างน้อยหนึ่งตัวสำหรับ MSYS2 / MinGW 32 / MinGW 64 และอัพเดต Target เพื่อเพิ่ม-shell zshหรืออะไรก็ได้ (ถ้าเชลล์อยู่ใน$PATHสภาพแวดล้อม MSYS ที่เพียงพอคุณไม่จำเป็นต้องใช้พา ธ แบบเต็ม)

ดังนั้นสำหรับเช่นตัวเรียกใช้งาน "ตัวเปิดใช้งาน" MSYS2 MinGW 64 บิต "ใน" MSYS2 64 บิต "บนเมนูเริ่ม Win7 ของฉัน:

ก่อน
เป้าหมาย: C:\msys64\msys2_shell.cmd -mingw64
หลังจาก
เป้าหมาย: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh

นั่นเป็นวิธีที่ง่ายและเข้ากันได้มากที่สุดในการเปลี่ยนอย่างถาวรเนื่องจากการเปลี่ยนแปลงของคุณจะไม่ถูกลบออกจากการอัพเกรดหรืออะไรก็ตาม

ตัวเรียกใช้งานไม่เพียงพอกับตัวแปรสภาพแวดล้อมรายการรีจิสตรี ฯลฯ นอกจาก-shellจะถูกส่งผ่านบนบรรทัดคำสั่งเพื่อลบล้างLOGINSHELL=bashค่าเริ่มต้นที่บังคับใช้ในตอนแรกจะถูกใช้


0

แก้ไข: ด้านล่างนี้ใช้กับ MSYS2 รุ่นก่อนหน้า ตั้งแต่ 2020-01-21 มันไม่จำเป็นอีกต่อไป คำตอบของ FeRD ดูเหมือนจะทำงานได้ดีที่สุด

ฉันต้องการใช้ปลาแทนทุบตี น่าเสียดายที่วิธีการส่วนใหญ่ที่นี่ไม่ได้ผลอาจเป็นเพราะไวยากรณ์ของปลานั้นแตกต่างกันมาก

สิ่งที่ใช้ได้ผลดีที่สุดคือแนวคิดของ wzhd เกี่ยวกับการวิ่งexec fishเป็นสิ่งแรกเมื่อเริ่มทุบตี ยังคงมีปัญหาอยู่: ถ้าฉันต้องการใช้ทุบตีฉันต้องแก้ไข.bashrcเพื่อลบบรรทัดนั้นเพราะแม้ว่าฉันจะเรียกใช้จากปลามันก็จะเริ่มต้นอีกตัวอย่างปลา

สิ่งที่ดีที่สุดที่ต้องทำคือการทำให้แน่ใจว่าexec fishจะเริ่มต้นเมื่อ msys2 เริ่มต้น แต่ไม่ใช่ทุกครั้งที่เริ่มการทุบตี

วิธีที่ฉันพบคือผ่านไฟล์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 command line ฉันก็ยังคงสามารถเริ่มต้นbashใหม่ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.