MSYS2 पर डिफ़ॉल्ट शेल बदलें


14

मैं से MSYS2 के डिफ़ॉल्ट खोल बदलना चाहते हैं bashकरने के लिए zsh

मैंने कोशिश की है chsh- MSYS2 में उपलब्ध नहीं है।
संपादन /etc/passwdकुछ नहीं करता है। इसे नजरअंदाज किया जा रहा है।

मैंने MSYS2 की रूट डायरेक्टरी में बैच स्क्रिप्ट्स पर एक नज़र डाली, और इसमें bashहार्डकोड किया गया है। मैंने हर /usr/bin/bashको बदल दिया /usr/bin/zsh, जो ठीक काम करता है, जब तक कि मैंने मिनगीड का उपयोग करने की कोशिश नहीं की।

यदि संभव हो तो मैं MSYS2 के शेल (ठीक से) को कहां बदल सकता हूं?

जवाबों:


8

मैं बस इस समस्या में भाग गया। Zsh को चलाने के लिए मैंने ऐसा किया:

  • MSYS2 स्थापित किया गया
  • निर्देशिका से मैंने MSYS2 स्थापित किया, मैं भाग गया mingw32_shell.bat
  • चलाकर सभी स्थापित पैकेजों को अपग्रेड किया pacman -Syu
  • चलाकर zsh और कर्ल स्थापित किया pacman -Sy zsh curl
  • चलाने से मिनगॉव खोल बंद कर दिया 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 %* (2015-09-23 को लाइन 39 पर)
  • दौड़ा mingw32_shell.bat
  • Zsh कॉन्फ़िगरेशन मेनू में मैं .zshrc 0फ़ाइल बनाने के लिए चयन करता हूं ।

जब विन्यास समाप्त हुआ तो मैंने देखा:

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

जो सही नहीं लगा ... क्योंकि rmकभी भी एक स्वस्थ * निक्स सिस्टम पर नेट नहीं मिलना चाहिए (मैं अनुमान लगा रहा हूं कि यह MSYS2 के zsh पैकेज के साथ एक बग है), लेकिन उसके बाद सब कुछ ठीक चला।

जब मैंने एक नया सत्र बनाने के लिए पहली बार बैच फ़ाइल खोली तो मैंने पहली बार यह कोशिश की, मुझे पहले से ही व्याप्त zsh की मेमोरी स्पेस के बारे में एक त्रुटि मिली। इसे ठीक करने के लिए मैंने सभी खुले मिंट्टी विंडो को बंद कर दिया और 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*खुद के बाद सफाई करना शामिल है। यह मेरे फेडोरा के करंट में ठीक वैसा ही है /usr/share/zsh/5.7.1/functions/zsh-newuser-install
FeRD

24

मैं नए msys2- लांचर का उपयोग करके इस में भाग गया, जो .exeबैच फ़ाइलों के बजाय लॉन्चर प्रदान करता है ।

इसके लिए, यह केवल .iniMsys2 रूट डायरेक्टरी के अंदर लॉन्चर के साथ फाइल बदलने का विषय था (64-बिट इंस्टॉलेशन के लिए, इसमें हो सकता है msys2.ini, mingw32.iniऔर mingw64.ini)। उन ini फ़ाइलों में से प्रत्येक के लिए, शेल सेट करने के लिए एक पंक्ति जोड़ें:

SHELL=/usr/bin/zsh

यह zshशेल के रूप में सेट करने का सीधा तरीका है । ओह-माय-ज़श की स्थापना के लिए कोई इस पद्धति पर विचार कर सकता है - skelभाग वास्तव में msys2 पर लागू नहीं होता है जहां तक ​​मैं देखता हूं।
TNT

1
यह जुलाई 2018 के अनुसार नए msys2 के लिए सही उत्तर है। स्वीकृत उत्तर अब काम नहीं करता है।
गैरीओ

अब और काम नहीं कर रहा है (14/03/19)
लेट

5

/etc/nsswitch.confनीचे दी गई सेटिंग को संपादित करें , और बदलें:

db_shell: /bin/zsh

यह काम करता है लेकिन एलन पीयर्स के समाधान के बजाय एक हैकिश संस्करण लगता है।
टीएनटी

मछली का उपयोग करने की कोशिश में मुझे यह काम नहीं मिला।
leetNightshade

मुझे यह उत्तर यहां भी मिला: github.com/elieux/msys2-launcher/issues/… लेकिन एलन पीयर्स का जवाब अच्छा लग रहा है। दोनों काम करता है, हालांकि, और आप भी अंदर खोल सेट कर सकते हैं msys2_shell.cmdबल्ला फ़ाइल है, लेकिन में इसे बदलने .cmdअगर तुम में से एक से शुरू कर दिया है फ़ाइल खोल को प्रभावित नहीं करता .exeरों
जोस

4

जब डिफ़ॉल्ट शेल को बदलना समर्थित नहीं है, तो शेल का उपयोग करने का एक तरीका यह है कि डिफ़ॉल्ट शेल शुरू होने पर इसे तुरंत शुरू करें।

उदाहरण के लिए, बस लिखने zshके लिए ~/.bashrc, और जब पार्टी शुरू होता है, यह आप के लिए zsh चलेंगे। कभी भी एक आवारा बैश प्रक्रिया को छोड़ दिया जाता है, और आपको लॉग आउट करते समय दो बार शेल छोड़ना पड़ता है। इसे बेहतर बनाने के लिए, exec zshइसके बजाय लिखें zsh, इस तरह से, बैश प्रक्रिया को पूरी तरह से एक zsh प्रक्रिया से बदल दिया जाता है।

यह तरीका सही नहीं है लेकिन इसे ज्यादातर मामलों में अच्छा काम करना चाहिए। हार्ड-कोडित मूल्यों को बदलने की तुलना में, यह कम संगतता मुद्दों का कारण हो सकता है।

यह पहली बार स्टैकऑवरफ्लो पर इस जवाब में उल्लिखित है ।


इस बारे में कुछ भी अच्छा या फैंसी नहीं है, लेकिन यह कम से कम उपद्रव के साथ काम करता है।
leetNightshade

3

स्थापित मेरा था नहीं स्वीकार किए जाते हैं जवाब में बताया गया फ़ाइलें ( msys2_shell.bat, mingw32_shell.bat, और mingw64_shell.bat)।

MSYS2 के मेरे Win10 सिस्टम इंस्टॉल (इंस्टॉलर फाइल का उपयोग करके msys2-x86_64-20161025.exe) में msys2_shell.cmdलाइन के साथ एक सिंगल फाइल है :

set "LOGINSHELL=bash"

मैं बदल bashगया zsh। अभी तक तो काम कर रहा है।


आपके समाधान ने मेरे लिए Win7 पर काम नहीं किया है क्या आपने उसके बाद अन्य चीजें की हैं?
लैटरल

1
क्षमा करें, मेरे पास और कोई जानकारी नहीं है। मैं डब्ल्यूएसएल पर चला गया, जो मेरी जरूरतों के लिए काम करता है। सौभाग्य।
xtian

इसने मेरे लिए win10 पर काम किया
जोस

हालाँकि अगर आपको किसी एक .exeफाइल से msys2 शुरू करने की आवश्यकता है तो यह शेल सेट नहीं करेगा, इसके लिए एलन पीयर्स के उत्तर पर गौर करें
जोस

1

मुझे एक समाधान मिल गया है, लेकिन इसके लिए जरूरी है कि आप जो भी अन्य टर्मिनल वर्तमान में उपयोग कर रहे हैं, उसके बजाय आप ConEmu का उपयोग करें। हालांकि, मेरी राय में, यह विंडोज़ पर सबसे अच्छा टर्मिनल ऐप है।

सबसे पहले, आपको pacman का उपयोग करके zsh इंस्टॉल करना होगा। मुझे लगता है कि आपने वह पहले ही प्राप्त कर लिया है। फिर, आपको 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_shellMSYS2 वातावरण को लॉन्च करने के लिए Windows में स्थापित कमांड एक -shellतर्क को स्वीकार करता है ।

इसलिए, एक अलग शेल का उपयोग करने के लिए, आप MSYS2 / MinGW 32 / MinGW 64 के लिए एक या अधिक लॉन्चरों के गुणों को संपादित कर सकते हैं, और -shell zshजो भी या कुछ भी जोड़ने के लिए लक्ष्य को अपडेट कर सकते हैं । (यदि शेल $PATHMSYS वातावरण के लिए है जो पर्याप्त है, तो आपको पूर्ण पथ की आवश्यकता नहीं है।)

तो, उदाहरण के लिए "MSYS2 MinGW 64-बिट" लॉन्चर "MSYS2 64bit" में मेरे विनर स्टार्ट मेनू पर:

इससे पहले
लक्ष्य: C:\msys64\msys2_shell.cmd -mingw64
उपरांत
लक्ष्य: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh

स्थायी रूप से स्विच करने का यह सबसे आसान और सबसे अनुकूल तरीका प्रतीत होता है, क्योंकि आपके बदलाव अपग्रेड या जो भी हो, मिटा नहीं पाएंगे।

अजीब तरह से पर्याप्त लॉन्चर किसी भी पर्यावरण चर, रजिस्ट्री प्रविष्टियों आदि का सम्मान नहीं करता है। जब तक कि इसे -shellओवरराइड करने के लिए कमांड लाइन पर पास नहीं किया जाता है, तो LOGINSHELL=bashडिफ़ॉल्ट रूप से यह शुरू में बलों का उपयोग करेगा।


0

EDIT: नीचे MSYS2 के पुराने संस्करणों पर लागू होता है। 2020-01-21 तक, अब इसकी आवश्यकता नहीं है। FeRD का जवाब सबसे अच्छा काम करता है।

मैं बैश के बजाय मछली का उपयोग करना चाहता था। दुर्भाग्य से यहाँ अधिकांश विधियाँ काम नहीं आईं, संभवतः क्योंकि मछली का सिंटैक्स बहुत भिन्न होता है।

exec fishबैश शुरू होने पर सबसे अच्छी बात यह थी कि चलने के बारे में wzhd का विचार क्या था । अभी भी एक समस्या थी, हालाँकि: यदि मैं बैश का उपयोग करना चाहता था, तो मुझे .bashrcउस लाइन को हटाने के लिए संपादित करना था क्योंकि अगर मैं इसे मछली से चलाता तो यह सिर्फ एक और मछली की शुरुआत होती।

सबसे अच्छी बात यह सुनिश्चित करना है कि exec fishजब msys2 शुरू होता है तो चलता है, लेकिन हर बार बैश शुरू नहीं होता है।

जिस तरह से मैंने पाया है कि msys2_shell.cmdmsys2 की स्थापना फ़ोल्डर में फ़ाइल के माध्यम से है । मुझे ये लाइनें मिलीं:

set SHELL_ARGS=

:collectparams

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

ऐसा लगता है कि जैसे ही यह शुरू होता है, वैसे ही इसे काटने के लिए पास करने के लिए मापदंडों को परिभाषित किया जाता है, लेकिन केवल जब यह स्क्रिप्ट चलती है (इसके विपरीत .bashrc)। इसलिए मैंने इस लाइन को उसके बाद जोड़ा:

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

अब तक सब कुछ ठीक लग रहा है। Msys2 को शुरू करने से पूर्व की लोडिंग समाप्त होते ही मछली के साथ बैश की जगह आ जाती है, लेकिन अगर मुझे एक bash कमांड लाइन की आवश्यकता है तो मैं अभी भी इसे शुरू कर सकता हूं bash

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.