Je viens de rencontrer ce problème. Pour lancer zsh, j'ai fait ceci:
- MSYS2 installé
- Depuis le répertoire où j'ai installé MSYS2, j'ai couru
mingw32_shell.bat
- Mise à niveau de tous les packages installés en exécutant
pacman -Syu
- Zsh installé et curl en exécutant
pacman -Sy zsh curl
- Fermé le shell MinGW en exécutant
exit
- je n'ai pas exécuté zsh
immédiatement après l'installation.
- Modifié msys2_shell.bat, mingw32_shell.bat et mingw64_shell.bat et changé chaque instance de:
start %WD%mintty -i /msys2.ico /usr/bin/bash --login %*
en:
start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %*
(sur la ligne 39 à partir du 2015-09-23)
- Ran
mingw32_shell.bat
- Dans le menu de configuration zsh, je choisis
0
de créer le fichier .zshrc.
Une fois la configuration terminée, j'ai vu:
zsh-newuser-install:1119: command not found: rm
Ce qui ne semblait pas correct ... car rm
il ne devrait jamais y avoir de net sur un système * nix sain (je suppose que c'est un bogue avec le package zsh de MSYS2), mais tout s'est bien passé après cela.
La première fois que j'ai essayé cela lorsque j'ai exécuté ouvert un fichier de commandes pour créer une nouvelle session, j'ai reçu une erreur sur l'espace mémoire de zsh déjà occupé. Pour résoudre ce problème, j'ai fermé toutes les fenêtres MinTTY ouvertes et j'ai exécuté le autorebase.bat
fichier dans le répertoire d'installation de MSYS2. Tout a fonctionné après ça.
Ensuite, j'ai installé oh-my-zsh. En utilisant:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
rm
est en fait vraiment innocent. La fin du/usr/share/zsh/functions/Newuser/zsh-newuser-install
script contient unrm -f $tmpfile*
pour nettoyer après lui-même. C'est exactement la même chose dans mon installation Fedora actuelle/usr/share/zsh/5.7.1/functions/zsh-newuser-install
.J'ai rencontré cela en utilisant le nouveau lanceur msys2, qui fournit des
.exe
lanceurs plutôt que des fichiers batch.Pour cela, il s'agissait simplement de changer les
.ini
fichiers aux côtés des lanceurs dans le répertoire racine Msys2 (pour une installation 64 bits, il pourrait contenirmsys2.ini
,mingw32.ini
etmingw64.ini
). Pour chacun de ces fichiers ini, ajoutez une ligne pour définir le shell:la source
zsh
comme shell. Pour configurer oh-my-zsh, on pourrait envisager cette méthode - laskel
partie ne s'applique pas vraiment à msys2 pour autant que je vois.Modifiez
/etc/nsswitch.conf
et modifiez le paramètre ci-dessous:la source
msys2_shell.cmd
fichier de chauve - souris, mais le changer dans le.cmd
fichier n'affecte pas le shell si vous devez commencer à partir de l' un des.exe
sLorsque la modification du shell par défaut n'est pas prise en charge, une façon d'utiliser le shell que vous aimez est de le démarrer immédiatement au démarrage du shell par défaut.
Par exemple, écrivez simplement
zsh
à~/.bashrc
, et quand bash démarre, il exécutera zsh pour vous. Cependant, un processus bash errant est toujours en cours d'exécution et vous devez quitter le shell deux fois lors de la déconnexion. Pour l'améliorer, écrivezexec zsh
au lieu dezsh
, de cette façon, le processus bash est complètement remplacé par un processus zsh.Cette méthode n'est pas parfaite mais elle devrait bien fonctionner dans la plupart des cas. Comparé à la modification de valeurs codées en dur, cela peut entraîner moins de problèmes de compatibilité.
Il est d'abord mentionné dans cette réponse sur StackOverflow .
la source
Mon installation n'a pas que les fichiers mentionnés dans la réponse acceptée (
msys2_shell.bat
,mingw32_shell.bat
etmingw64_shell.bat
).Au lieu de cela, mon installation système Win10 de MSYS2 (en utilisant le fichier d'installation
msys2-x86_64-20161025.exe
) a un seul fichier,msys2_shell.cmd
avec la ligne:J'ai changé
bash
pourzsh
. Semble fonctionner jusqu'à présent.la source
.exe
fichiers, cela ne définira pas le shell, pour cela, regardez la réponse d'Alan PearceJ'ai une solution mais elle nécessite que vous utilisiez ConEmu au lieu de tout autre terminal que vous utilisez actuellement. Essayez, à mon avis, c'est la meilleure application de terminal sur Windows.
Tout d'abord, vous devrez installer zsh à l'aide de pacman. Je suppose que vous êtes déjà allé aussi loin. Ensuite, vous devrez installer ConEmu (ce que vous pouvez faire avec Chocolatey ou simplement en téléchargeant le programme d'installation à partir du site conemu). Dans les paramètres ConEmu, sous «Tâches», vous devez ajouter une nouvelle tâche. Il en a probablement déjà un appelé
Bash::Msys2-64
ou quelque chose comme ça, alors peut-être que vous en appellerez unZsh::Msys2-64
. Le nom est en tout cas arbitraire. Dans la zone «Commandes» de cette nouvelle tâche, vous pouvez essentiellement copier la commande à partir deBash::Msys2-64
et la remplacer lezsh.exe
cas échéant. Le mien est comme:Ensuite, dans les options de «démarrage» de ConEmu, vous pouvez définir cela comme votre tâche de démarrage afin que l'ouverture de ConEmu vous amène directement dans votre Zsh à chaque fois. Évidemment, vous pouvez également définir un combo de touches pour l'ouvrir ou toute autre tâche dans un nouvel onglet ou tout ce que vous voulez. ConEmu a beaucoup d'options, donc je suis sûr que vous pourrez le configurer comme vous le souhaitez.
la source
Les développeurs MSYS2 continuent évidemment de modifier leur configuration, car dans les dernières installations, la
msys2_shell
commande installée dans Windows pour lancer le ou les environnements MSYS2 accepte un-shell
argument.Ainsi, pour utiliser un autre shell, vous pouvez modifier les propriétés d'un ou plusieurs lanceurs pour MSYS2 / MinGW 32 / MinGW 64 et mettre à jour la cible à ajouter
-shell zsh
ou autre. (Si le shell est$PATH
suffisant pour l'environnement MSYS, vous n'avez pas besoin du chemin complet.)Ainsi, par exemple pour le lanceur "MSYS2 MinGW 64-bit" dans "MSYS2 64bit" sur mon menu Démarrer Win7:
Cela semble être le moyen le plus simple et le plus compatible pour passer de manière permanente, car vos modifications ne seront pas effacées par les mises à niveau ou autre.
Curieusement, les lanceurs ne respectent pas les variables d'environnement, les entrées de registre, etc. À moins d'
-shell
être transmis sur la ligne de commande pour le remplacer, laLOGINSHELL=bash
valeur par défaut qu'il force initialement sera utilisée.la source
EDIT: ce qui suit s'applique aux versions antérieures de MSYS2. Depuis le 2020-01-21, il n'est plus nécessaire. La réponse de FeRD semble fonctionner le mieux.
Je voulais utiliser du poisson au lieu de bash. Malheureusement, la plupart des méthodes ici n'ont pas fonctionné, peut-être parce que la syntaxe du poisson est si différente.
Ce qui a le mieux fonctionné, c'est l'idée de wzhd de courir
exec fish
en premier lorsque bash commence. Il y avait toujours un problème, cependant: si je voulais utiliser bash, je devais éditer.bashrc
pour supprimer cette ligne car même si je l'exécutais à partir de fish, cela ne ferait que démarrer une autre instance de fish.La meilleure chose à faire est de s'assurer qu'elle
exec fish
s'exécute au début de msys2, mais pas à chaque démarrage de bash.La façon dont j'ai trouvé est à travers le fichier
msys2_shell.cmd
dans le dossier d'installation de msys2. J'ai trouvé ces lignes:Il semble qu'ils définissent des paramètres à passer à bash dès qu'il commence, mais uniquement lorsque ce script s'exécute (contrairement
.bashrc
). J'ai donc ajouté cette ligne juste après:Tout semble aller bien jusqu'à présent. Le démarrage de msys2 remplace bash par fish dès que le premier termine le chargement, mais si j'ai besoin d'une ligne de commande bash, je peux toujours le démarrer avec
bash
.la source