MSYS2'de varsayılan kabuğu değiştirme


14

Ben den MSYS2 varsayılan kabuk değiştirmek istediğiniz bashiçin zsh.

Denedim chsh- MSYS2'de mevcut değil.
Düzenleme /etc/passwdhiçbir şey yapmaz. Yok sayılıyor gibi görünüyor.

Ben MSYS2 kök dizininde toplu komut bir göz attım ve bashiçinde kodlanmış 'dir. Her değişti /usr/bin/bashiçin /usr/bin/zshben MinGW kullanarak çalıştı kadar para cezası çalıştığı,.

Mümkünse MSYS2'nin kabuğunu (düzgün bir şekilde) nerede değiştirebilirim?

Yanıtlar:


8

Ben sadece bu problemle karşılaştım. Zsh çalıştırmak için bunu yaptım:

  • Yüklü MSYS2
  • MSYS2'yi yüklediğim dizinden koştum mingw32_shell.bat
  • Kurulu tüm paketleri çalıştırarak yükseltin pacman -Syu
  • Zsh ve curl'u çalıştırarak yükledi pacman -Sy zsh curl
  • MinGW kabuğunu çalıştırarak kapattım exit- kurulumdan hemen sonra çalıştırmadım zsh.
  • Msys2_shell.bat, mingw32_shell.bat ve mingw64_shell.bat düzenlendi ve her örneği değiştirildi start %WD%mintty -i /msys2.ico /usr/bin/bash --login %* : start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %* ( 2015-09-23 itibarıyla 39. satırda)
  • Koştu mingw32_shell.bat
  • Zsh yapılandırma menüsünde 0.zshrc dosyasını oluşturmayı seçiyorum .

Yapılandırma tamamlandığında şunu gördüm:

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

Bu doğru görünmüyordu ... çünkü rmasla sağlıklı bir * nix sisteminde net olmamalı (MSYS2'nin zsh paketi ile ilgili bir hata olduğunu tahmin ediyorum), ancak bundan sonra her şey yolunda gitti.

Yeni bir oturum oluşturmak için bir toplu iş dosyasını açtığımda bunu ilk denediğimde, zaten işgal edilmiş olan zsh'ın bellek alanı hakkında bir hata aldım. Bunu düzeltmek için tüm açık MinTTY pencerelerini autorebase.batkapattım ve dosyayı MSYS2 kurulum dizininde çalıştırdım. Bundan sonra her şey çalıştı.

Sonra oh-my-zsh'i kurdum. Kullanımı:

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


Temel olarak bu yöntemi yapmaya çalışıyordum ve balıkların hatasız çalışmasını sağlayamadım.
leetNightshade

1
rmAslında gerçekten masum. Sonu /usr/share/zsh/functions/Newuser/zsh-newuser-installkomut bir içerir rm -f $tmpfile*kendisi sonra temizlemek için. Fedora kurulumumun akımında tam olarak aynı /usr/share/zsh/5.7.1/functions/zsh-newuser-install.
FeRD

24

Bu, .exetoplu iş dosyaları yerine başlatıcılar sağlayan daha yeni msys2-launcher'ı kullanarak karşılaştım .

Bunun için, sadece değişen meselesi .iniMsys2 kök dizinine (64 bit kurulum için, bu içerebilir içindeki rampaları yanında dosyaları msys2.ini, mingw32.inive mingw64.ini). Bu ini dosyalarının her biri için kabuğu ayarlamak üzere bir satır ekleyin:

SHELL=/usr/bin/zsh

zshKabuk olarak ayarlamanın doğrudan yolu budur . Oh-my-zsh kurulumu için bu yöntem düşünülebilir - skelparça gördüğüm kadarıyla gerçekten msys2 için geçerli değildir.
TNT

1
Bu, Temmuz 2018 itibariyle yeni msys2 için doğru yanıttır. Kabul edilen yanıt artık çalışmıyor.
GaryO

artık çalışmıyor (14/03/19)
8'de letroll

5

Düzen /etc/nsswitch.confve aşağıdaki ayarı değiştirin:

db_shell: /bin/zsh

Bu işe yarıyor ama Alan Pearce'ın çözümünün oldukça çılgın bir versiyonu gibi görünüyor.
TNT

Bunu balık kullanmaya çalışırken yapamadım.
leetNightshade

Bu yanıtı burada da buldum: github.com/elieux/msys2-launcher/issues/… ama Alan Pearce'ın cevabı daha hoş görünüyor. Her ikisi de olsa çalışır ve ayrıca msys2_shell.cmdyarasa dosyasının içindeki kabuğu da ayarlayabilirsiniz , ancak s.cmd.exe
Jose

4

Varsayılan kabuğu değiştirmek desteklenmiyorsa, beğendiğiniz kabuğu kullanmanın bir yolu, varsayılan kabuk başladığında hemen başlatmaktır.

Örneğin, sadece yazmak zshiçin ~/.bashrc, ve ne zaman bash başladığında, sizin için Zsh çalışacaktır. Bir başıboş bash işleminin ne kadar sürdüğü ve oturumu kapatırken kabuktan iki kez çıkmanız gerekir. Daha iyi hale getirmek için , bu şekilde yazmak exec zshyerine zsh, bash işlemi tamamen bir zsh işlemiyle değiştirilir.

Bu yöntem mükemmel değildir, ancak çoğu durumda iyi çalışmalıdır. Sabit kodlanmış değerlerin değiştirilmesi ile karşılaştırıldığında, daha az uyumluluk sorunlarına neden olabilir.

İlk olarak StackOverflow'daki bu cevapta bahsedilmiştir .


Bu konuda hoş veya süslü bir şey yok, ama en az yaygara ile çalışıyor.
leetNightshade

3

Did yüklemek listem değil kabul cevapta belirtildiği dosyaları ( msys2_shell.bat, mingw32_shell.batve mingw64_shell.bat).

Bunun yerine, MSYS2'nin Win10 sistem kurulumumun (yükleyici dosyasını kullanarak msys2-x86_64-20161025.exe) şu msys2_shell.cmdsatırda tek bir dosyası vardır :

set "LOGINSHELL=bash"

Değiştim bashiçin zsh. Şimdiye kadar çalışıyor gibi görünüyor.


çözümünüz Win7'de benim için çalışmadı, bundan sonra başka şeyler yaptınız mı?
19'da

1
Üzgünüm, daha fazla bilgim yok. İhtiyacım için çalışan WSL'ye geçtim. İyi şanslar.
xtian

Bu benim için win10 üzerinde çalıştı
Jose

Bununla birlikte, msys2'yi dosyalardan birinden başlatmanız gerekiyorsa, .exebu kabuk oluşturmaz, çünkü Alan Pearce'ın cevabına bakın
Jose

1

Bir çözümüm var ama şu anda kullandığınız diğer terminal yerine ConEmu kullanmanızı gerektiriyor . Yine de bir deneyin, bence, windows en iyi terminal uygulaması.

Her şeyden önce, pacman kullanarak zsh yüklemeniz gerekir. Sanırım bu kadar uzağa gittin. Ardından, ConEmu (Chocolatey ile yapabileceğiniz veya yalnızca conemu sitesinden yükleyiciyi indirerek yapabileceğiniz) yüklemeniz gerekir. ConEmu ayarlarında, 'Görevler' altına yeni bir görev eklemelisiniz. Muhtemelen zaten bir tane Bash::Msys2-64ya da bunun gibi bir şey var, bu yüzden belki bir tane yaparsınız Zsh::Msys2-64. Her durumda isim keyfidir. Bu yeni görevin 'Komutlar' kutusunda, komutu temel olarak kopyalayabilir Bash::Msys2-64ve zsh.exeuygun olan yerde değiştirebilirsiniz . Benimki şöyle:

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

Ardından, ConEmu'nun 'Başlangıç' seçeneklerinde, bunu başlangıç ​​göreviniz olarak ayarlayabilirsiniz, böylece ConEmu'nun açılması sizi her seferinde doğrudan Zsh'inize götürür. Açıkçası, yeni bir sekmede veya istediğiniz herhangi bir şeyi açmak için bir tuş kombinasyonu da ayarlayabilirsiniz. ConEmu birçok seçenek sunuyor, bu yüzden istediğiniz gibi kurabileceğinizden eminim.


0

En yeni yüklemelerde, msys2_shellMSYS2 ortamlarını başlatmak için Windows'a yüklenen komut bir -shellargümanı kabul ettiğinden , MSYS2 geliştiricileri açık bir şekilde kurulumlarını değiştirmeye devam eder .

Bu nedenle, farklı bir kabuk kullanmak için, MSYS2 / MinGW 32 / MinGW 64 için bir veya daha fazla fırlatıcının Özelliklerini düzenleyebilir ve ekleyeceğiniz hedefi güncelleyebilirsiniz -shell zsh. (Kabuk $PATHMSYS ortamı için yeterliyse, tam yola ihtiyacınız yoktur.)

Yani, örneğin, Win7 Başlat menümdeki "MSYS2 64bit" içindeki "MSYS2 MinGW 64-bit" başlatıcısı için:

Önce
Hedef: C:\msys64\msys2_shell.cmd -mingw64
Sonra
Hedef: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh

Kalıcı olarak geçiş yapmanın en kolay ve en uyumlu yolu gibi görünüyor, çünkü değişiklikleriniz yükseltmelerle veya herhangi bir şeyle silinmeyecek.

Gariptir ki, başlatıcılar herhangi bir ortam değişkenine, kayıt defteri girdisine vb. Saygı göstermez -shell. Geçersiz kılmak için komut satırına iletilmediği sürece , LOGINSHELL=bashbaşlangıçta zorladığı varsayılan değer kullanılır.


0

EDIT: Aşağıdaki MSYS2'nin önceki sürümleri için geçerlidir. 2020-01-21 itibariyle artık gerekmemektedir. FeRD'nin cevabı en iyi sonucu veriyor gibi görünüyor.

Ben bash yerine balık kullanmak istedim. Ne yazık ki buradaki yöntemlerin çoğu işe yaramadı, çünkü balık sözdizimi çok farklıydı.

En iyi sonuç veren şey, wzhd'un exec fishbash başladığında ilk şey olarak koşma fikriydi . Yine de bir sorun vardı: Eğer bash kullanmak istersem, .bashrco satırı kaldırmak için düzenlemek zorunda kaldım çünkü balıktan çalıştırsam bile başka bir balık örneği başlatacaktı.

Yapılacak en iyi şey exec fish, msys2 başladığında çalıştığından emin olmaktır, ancak her bash başladığında değil.

Bulduğum yol msys2_shell.cmdmsys2'nin kurulum klasöründeki dosyadan. Şu satırları buldum:

set SHELL_ARGS=

:collectparams

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

Görünüşe göre, başlar başlamaz bash'a geçmek için parametreleri tanımlıyorlar, ancak sadece bu komut dosyası çalıştığında (aksine .bashrc). Bu satırı hemen sonra ekledim:

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

Şimdiye kadar her şey yolunda görünüyor. Msys2'yi başlatmak, önceki yüklemeyi bitirir bitirmez bash'ı balıkla değiştirir, ancak bir bash komut satırına ihtiyacım varsa, hala başlayabilirim bash.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.