Thay đổi shell mặc định trên MSYS2


12

Tôi muốn thay đổi shell mặc định của MSYS2 từ bashsang zsh.

Tôi đã thử chsh- không có sẵn trong MSYS2.
Chỉnh sửa /etc/passwdkhông làm gì cả. Nó dường như bị bỏ qua.

Tôi đã xem xét các kịch bản hàng loạt trong thư mục gốc MSYS2, và bashlà hardcoded trong. Tôi đã thay đổi tất cả /usr/bin/bashđể /usr/bin/zsh, mà làm việc tốt, cho đến khi tôi cố gắng sử dụng MinGW.

Tôi có thể thay đổi vỏ của MSYS2 ở đâu (đúng cách), nếu có thể?

Câu trả lời:


7

Tôi chỉ gặp vấn đề này. Để có được zsh chạy tôi đã làm điều này:

  • Đã cài đặt MSYS2
  • Từ thư mục tôi đã cài đặt MSYS2, tôi đã chạy mingw32_shell.bat
  • Nâng cấp tất cả các gói đã cài đặt bằng cách chạy pacman -Syu
  • Đã cài đặt zsh và curl bằng cách chạy pacman -Sy zsh curl
  • Đóng vỏ MinGW bằng cách chạy exit- Tôi không chạy zshngay sau khi cài đặt.
  • Đã chỉnh sửa msys2_shell.bat, mingw32_shell.bat và mingw64_shell.bat và thay đổi mọi phiên bản của: start %WD%mintty -i /msys2.ico /usr/bin/bash --login %* thành: start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %* (trên dòng 39 kể từ 2015-09-23)
  • Chạy mingw32_shell.bat
  • Trong menu cấu hình zsh tôi chọn 0để tạo tệp .zshrc.

Khi cấu hình xong tôi thấy:

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

Điều đó có vẻ không ổn ... vì rmkhông bao giờ nên tìm thấy mạng trên hệ thống * nix lành mạnh (tôi đoán đó là lỗi với gói zsh của MSYS2), nhưng mọi thứ đã chạy tốt sau đó.

Lần đầu tiên tôi thử điều này khi tôi chạy đã mở một tệp bó để tạo một phiên mới, tôi đã nhận được một lỗi về không gian bộ nhớ của zsh đã bị chiếm dụng. Để khắc phục điều này, tôi đã đóng tất cả các cửa sổ MinTTY đang mở và chạy autorebase.battệp trong thư mục cài đặt MSYS2. Mọi thứ đã hoạt động sau đó.

Sau đó, tôi đã cài đặt oh-my-zsh. Sử dụng:

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


Về cơ bản, tôi đã cố gắng thực hiện phương pháp này và tôi không thể bắt cá làm việc mà không có lỗi.
leetNightshade

Các rmthực sự là thực sự vô tội. Phần cuối của /usr/share/zsh/functions/Newuser/zsh-newuser-installtập lệnh chứa một phần rm -f $tmpfile*để dọn dẹp sau chính nó. Nó giống hệt như trong bản cài đặt Fedora của tôi /usr/share/zsh/5.7.1/functions/zsh-newuser-install.
FeRD

15

Tôi đã sử dụng trình khởi chạy msys2 mới hơn, cung cấp các .exetrình khởi chạy thay vì các tệp bó.

Đối với điều này, nó chỉ đơn giản là vấn đề của việc thay đổi .inicác file cùng với bệ phóng bên trong thư mục gốc Msys2 (đối với một cài đặt 64-bit, nó có thể chứa msys2.ini, mingw32.inimingw64.ini). Đối với mỗi tệp ini đó, hãy thêm một dòng để đặt shell:

SHELL=/usr/bin/zsh

Đây là cách trực tiếp để đặt zshlàm vỏ. Để thiết lập oh-my-zsh, người ta có thể xem xét phương pháp này - skelphần không thực sự áp dụng cho msys2 theo như tôi thấy.
TNT

Đây là câu trả lời đúng cho msys2 mới hơn kể từ tháng 7 năm 2018. Câu trả lời được chấp nhận không còn hoạt động.
GaryO

không hoạt động nữa (14/03/19)
hãy đăng ký

4

Khi thay đổi shell mặc định không được hỗ trợ, một cách để sử dụng shell bạn thích là khởi động nó ngay lập tức khi shell mặc định bắt đầu.

Ví dụ, chỉ cần viết zshđến ~/.bashrc, và khi bash bắt đầu, nó sẽ chạy zsh cho bạn. Bao giờ một quá trình bash đi lạc vẫn còn chạy và bạn phải thoát shell hai lần khi đăng xuất. Để làm cho nó tốt hơn, hãy viết exec zshthay vì zsh, theo cách này, quy trình bash được thay thế hoàn toàn bằng quy trình zsh.

Phương pháp này không hoàn hảo nhưng nó sẽ hoạt động tốt trong hầu hết các trường hợp. So với việc thay đổi các giá trị được mã hóa cứng, nó có thể gây ra các vấn đề tương thích ít hơn.

Nó được đề cập đầu tiên trong câu trả lời này trên StackOverflow .


Không có gì hay ho về cái này, nhưng nó hoạt động với ít phiền phức nhất.
leetNightshade

4

Chỉnh sửa /etc/nsswitch.confvà thay đổi cài đặt bên dưới:

db_shell: /bin/zsh

Điều này hoạt động nhưng có vẻ như một phiên bản khá hack của giải pháp Alan Pearce.
TNT

Tôi không thể làm điều này để cố gắng sử dụng cá.
leetNightshade

2

Tôi cài đặt đã không có các tập tin được đề cập trong câu trả lời được chấp nhận ( msys2_shell.bat, mingw32_shell.batmingw64_shell.bat).

Thay vào đó, bản cài đặt hệ thống Win10 của MSYS2 (sử dụng tệp trình cài đặt msys2-x86_64-20161025.exe) có một tệp duy nhất, msys2_shell.cmdvới dòng:

set "LOGINSHELL=bash"

Tôi đổi bashthành zsh. Có vẻ như để làm việc cho đến nay.


Giải pháp của bạn không hiệu quả với tôi trên Win7, bạn có làm những việc khác sau đó không?
hãy đăng ký

1
Xin lỗi, tôi không có thêm thông tin nào. Tôi đã chuyển sang WSL, hoạt động cho nhu cầu của tôi. Chúc may mắn.
xtian

1

Tôi đã có một giải pháp nhưng nó yêu cầu bạn sử dụng ConEmu thay vì bất kỳ thiết bị đầu cuối nào khác mà bạn hiện đang sử dụng. Mặc dù vậy, hãy thử xem, đó là ứng dụng đầu cuối tốt nhất trên windows.

Trước hết, bạn sẽ cần cài đặt zsh bằng pacman. Tôi đoán bạn đã nhận được điều đó đến nay. Sau đó, bạn sẽ cần cài đặt ConEmu (bạn có thể làm với Chocolatey hoặc chỉ bằng cách tải xuống trình cài đặt từ trang conemu). Trong cài đặt ConEmu, trong phần 'Nhiệm vụ', bạn nên thêm một tác vụ mới. Có lẽ nó đã có một cuộc gọi Bash::Msys2-64hoặc một cái gì đó tương tự như vậy nên có thể bạn sẽ thực hiện một cuộc gọi Zsh::Msys2-64. Tên này là tùy ý trong mọi trường hợp. Trong hộp 'Lệnh' cho tác vụ mới này, về cơ bản bạn có thể sao chép lệnh từ Bash::Msys2-64và thay thế zsh.exekhi thích hợp. Của tôi giống như:

set CHERE_INVOKING=1 & %ConEmuDrive%\msys64\usr\bin\zsh.exe --login -i -new_console:C:"%ConEmuDrive%\msys64\msys2.ico"

Sau đó, trong các tùy chọn 'Khởi động' của ConEmu, bạn có thể đặt nhiệm vụ này làm nhiệm vụ khởi động của mình để việc mở ConEmu giúp bạn ngay lập tức vào Zsh của mình. Rõ ràng bạn cũng có thể thiết lập một tổ hợp phím để mở nó hoặc bất kỳ tác vụ nào khác trong một tab mới hoặc bất cứ điều gì bạn muốn. ConEmu có vô số tùy chọn nên tôi chắc chắn bạn sẽ có thể thiết lập nó theo cách bạn muốn.


0

Tôi muốn sử dụng cá thay vì bash. Thật không may, hầu hết các phương pháp ở đây không hoạt động, có thể là do cú pháp của cá quá khác nhau.

Điều làm việc tốt nhất là ý tưởng của wzhd về việc chạy exec fishnhư là điều đầu tiên khi bash bắt đầu. Tuy nhiên, vẫn còn một vấn đề: Nếu tôi muốn sử dụng bash, tôi phải chỉnh sửa .bashrcđể xóa dòng đó vì ngay cả khi tôi chạy nó từ cá, nó sẽ chỉ bắt đầu một cá thể khác.

Điều tốt nhất để làm là đảm bảo exec fishchạy khi msys2 bắt đầu, nhưng không phải mỗi khi bash bắt đầu.

Cách tôi tìm thấy là thông qua tệp msys2_shell.cmdtrong thư mục cài đặt của msys2. Tôi tìm thấy những dòng này:

set SHELL_ARGS=

:collectparams

if not "x%~1" == "x" set SHELL_ARGS=%SHELL_ARGS% %1& shift& goto :collectparams

Có vẻ như họ đang xác định các tham số để chuyển đến bash ngay khi nó bắt đầu, nhưng chỉ khi tập lệnh này chạy (không giống như .bashrc). Vì vậy, tôi đã thêm dòng này ngay sau:

set SHELL_ARGS=%SHELL_ARGS% -c "exec fish"

Mọi thứ dường như vẫn ổn cho đến nay. Bắt đầu msys2 thay thế bash bằng cá ngay sau khi tải xong, nhưng nếu tôi cần một dòng lệnh bash, tôi vẫn có thể bắt đầu với nó bash.


0

Các nhà phát triển MSYS2 rõ ràng tiếp tục thay đổi thiết lập của họ, bởi vì trong các bản cài đặt mới nhất , msys2_shelllệnh được cài đặt trong Windows để khởi chạy (các) môi trường MSYS2 chấp nhận một -shellđối số.

Vì vậy, để sử dụng một lớp vỏ khác, bạn có thể chỉnh sửa Thuộc tính của một hoặc nhiều trình khởi chạy cho MSYS2 / MinGW 32 / MinGW 64 và cập nhật Target để thêm -shell zshhoặc bất cứ thứ gì. (Nếu hệ vỏ $PATHdành cho môi trường MSYS là đủ, bạn không cần đường dẫn đầy đủ.)

Vì vậy, ví dụ: trình khởi chạy "MSYS2 MinGW 64-bit" trong "MSYS2 64 bit" trên menu Bắt đầu Win7 của tôi:

Trước
Mục tiêu: C:\msys64\msys2_shell.cmd -mingw64
Sau
Mục tiêu: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh

Đó dường như là cách dễ nhất và tương thích nhất để chuyển đổi vĩnh viễn, vì những thay đổi của bạn sẽ không bị xóa sổ bởi các bản nâng cấp hoặc bất cứ điều gì.

Thật kỳ lạ, các trình khởi chạy không tôn trọng bất kỳ biến môi trường, mục đăng ký, v.v. Trừ khi -shellđược truyền vào dòng lệnh để ghi đè lên nó, LOGINSHELL=bashmặc định rằng các lực lượng ban đầu sẽ được sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.