Зміна оболонки за замовчуванням на MSYS2


14

Я хочу змінити стандартну оболонку MSYS2 з bashна zsh.

Я спробував 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, запустивши 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 станом на 23.09.2015)
  • Побіг mingw32_shell.bat
  • У меню конфігурації zsh я вибираю, 0щоб створити файл .zshrc.

Коли конфігурація закінчена, я побачив:

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

Що не виглядало правильно ... оскільки rmніколи не слід знаходити мережу в здоровій системі * nix (я здогадуюсь, це помилка з пакетом zsh MSYS2), але після цього все вийшло нормально.

Перший раз, коли я спробував це, коли я запустив, відкрив пакетний файл для створення нового сеансу, я отримав помилку щодо вже зайнятого простору пам'яті zsh. Щоб виправити це, я закрив усі відкриті вікна MinTTY і запустив autorebase.batфайл у каталог встановлення MSYS2. Все працювало після цього.

Тоді я встановив ох-мі-шш. Використання:

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-запускатель, який забезпечує запуски, .exeа не пакетні файли.

Для цього, це був просто питання зміни .iniфайлів разом з пусковими всередині кореневої директорії Msys2 (для 64-розрядної версії с, він може містити msys2.ini, mingw32.iniа mingw64.ini). Для кожного з цих файлів ini додайте рядок для встановлення оболонки:

SHELL=/usr/bin/zsh

Це прямий спосіб встановити zshоболонку. Для налаштування oh-my-zsh можна розглянути цей метод - skelчастина насправді не стосується msys2, наскільки я бачу.
ТНТ

1
Це правильна відповідь для нових msys2 станом на липень 2018 року. Прийнята відповідь більше не працює.
GaryO

більше не працюю (14.03.19)
підписати

5

Відредагуйте /etc/nsswitch.confта змініть налаштування нижче:

db_shell: /bin/zsh

Це працює, але здається досить шаленою версією рішення Алана Пірса.
ТНТ

Я не міг змусити це працювати, намагаючись вживати рибу.
leetNightshade

Я знайшов цю відповідь і тут: github.com/elieux/msys2-launcher/isissue/…, але відповідь Алана Пірса здається приємнішою. І те й msys2_shell.cmdінше працює, і ви також можете встановити оболонку всередині файлу bat, але зміна її у .cmdфайлі не вплине на оболонку, якщо вам доведеться починати з одного з .exes
Хосе

4

Коли зміна оболонки за замовчуванням не підтримується, один із способів використання оболонки, яка вам подобається, - це запустити її негайно, коли запуститься оболонка за замовчуванням.

Наприклад, просто запишіть zshдо ~/.bashrc, і коли bash почнеться, він запустить zsh для вас. Як колись процес бідного баш-файлу не працює, і вам доведеться двічі вийти з оболонки, коли виходите з системи. Щоб зробити це краще, пишіть exec zshзамість zshцього, процес bash повністю замінюється процесом 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. Чи робите ви інші речі після цього?
виїзд

1
Вибачте, я не маю додаткової інформації. Я перейшов до WSL, який працює для моїх потреб. Удачі.
xtian

це працювало для мене на win10
Хосе

однак якщо вам потрібно запустити msys2 з одного з .exeфайлів, оболонка не встановить, для цього подивіться відповідь Алана Пірса
Хосе

1

У мене є рішення, але воно вимагає використання ConEmu замість будь-якого іншого терміналу, який ви зараз використовуєте. Спробуйте, хоча, на мою думку, це найкращий термінальний додаток для Windows.

Перш за все, вам потрібно буде встановити zsh за допомогою Pacman. Я здогадуюсь, ти вже так далеко зайшов. Потім вам потрібно буде встановити ConEmu (що ви можете зробити з Chocolatey або просто завантаживши інсталятор з сайту 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 УБС явно зберегти зміни їх установки, тому що в новітніх установок, то msys2_shellкоманда , яка встановлена в ОС Windows для запуску середовища MSYS2 (s) приймає -shellаргумент.

Отже, щоб використовувати іншу оболонку, ви можете відредагувати Властивості одного або декількох пускових установок для MSYS2 / MinGW 32 / MinGW 64 та оновити Target, щоб додати -shell zshчи що завгодно. (Якщо оболонка є $PATHдля достатнього середовища MSYS, вам не потрібен повний шлях.)

Так, наприклад, пускова установка "64-розрядний MSYS2 MinGW" в "MSYS2 64bit" в меню "Пуск" Win7:

До цього
Ціль: C:\msys64\msys2_shell.cmd -mingw64
Після
Ціль: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh

Це, здається, є найпростішим і суміснішим способом постійного перемикання, оскільки оновлення не будуть знищені оновленнями або будь-яким іншим.

Як не дивно пускові установки не враховує всі змінні оточення, записи реєстру і т.д. Якщо -shellне передається в командному рядку , щоб змінити це, по LOGINSHELL=bashзамовчуванням , що спочатку буде використовуватися сили.


0

EDIT: Наведене нижче стосується більш ранніх версій MSYS2. Станом на 2020-01-21 рік більше не потрібен. Відповідь FeRD, здається, працює найкраще.

Я хотів використовувати рибу замість баш. На жаль, більшість методів тут не спрацювала, можливо, тому що синтаксис риб настільки різний.

Найкраще працювала ідея wzhd про те, що бігати exec fishяк перше, коли починається баш. Проблема все ще була: Якщо я хотів використовувати 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 рибою, як тільки колишній закінчує завантаження, але якщо мені потрібен командний рядок bash, я все одно просто запускаю його bash.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.