MSYS2のデフォルトシェルを変更する


14

私はからMSYS2のデフォルトのシェルを変更したいbashzsh

私は試しchshました-MSYS2では利用できません。
編集/etc/passwdしても何も起こりません。無視されているようです。

MSYS2のルートディレクトリにあるバッチスクリプトを確認しましたが、bashハードコードされています。MinGW を使用するまで、すべて/usr/bin/bashをに変更しました/usr/bin/zsh

可能であれば、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 %* ように 変更しました(2015年9月23日の start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %* 39行目)。
  • ラン mingw32_shell.bat
  • zsh構成メニューで0、.zshrcファイルの作成を選択します。

設定が完了すると、次のことがわかりました。

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

これは正しくrmありませんでした... 健全な* nixシステム(MSYS2のzshパッケージのバグだと思います)でネットを見つけてはならないためですが、その後はすべて正常に動作しました。

新しいセッションを作成するためにバッチファイルを開いて実行したときにこれを初めて試したとき、zshのメモリ領域がすでに占有されているというエラーを受け取りました。これを修正するために、開いているすべてのMinTTYウィンドウを閉じautorebase.bat、MSYS2インストールディレクトリでファイルを実行しました。その後はすべてうまくいきました。

次に、oh-my-zshをインストールしました。使用:

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

.exeは、バッチファイルではなくランチャーを提供する新しいmsys2-launcherを使用してこれに遭遇しました。

このために、それは単に変更の問題だった.ini(64ビットインストールのために、それが含まれている場合がありますMsys2のルートディレクトリ内のランチャーと一緒にファイルをmsys2.inimingw32.inimingw64.ini)。これらの各iniファイルについて、シェルを設定する行を追加します。

SHELL=/usr/bin/zsh

これはzshシェルとして設定する直接の方法です。oh-my-zshを設定するには、この方法を検討skelする必要があります。私が見る限り、この部分はmsys2には実際には適用されません。
TNT

1
これは、2018年7月現在の新しいmsys2の正解です。受け入れられた答えは機能しなくなりました。
GaryO

動作しなくなった(14/03/19)
letroll

5

編集して/etc/nsswitch.conf、以下の設定を変更します。

db_shell: /bin/zsh

これは機能しますが、アラン・ピアスのソリューションのかなりハックなバージョンのようです。
TNT

魚を使おうとしてもうまくいきませんでした。
leetNightshade 2018

私もここでこの回答を見つけました:github.com/elieux/msys2-launcher/issues/…しかし、Alan Pearceの回答の方がいいようです。どちらも機能しますが、msys2_shell.cmdbatファイル内にシェルを設定することもでき.cmdますが、.exesの1つから開始する必要がある場合、ファイルで変更してもシェルには影響しません
Jose

4

デフォルトのシェルの変更がサポートされていない場合、好きなシェルを使用する1つの方法は、デフォルトのシェルが起動したらすぐに起動することです。

例えば、単に書くzshには~/.bashrc、いつのbashが起動、それはあなたのためのzshを実行します。stray bashプロセスが実行されたままで、ログアウトするときにシェルを2回終了する必要がある場合。より良くするために、のexec zsh代わりにを書き込んでくださいzsh。このようにして、bashプロセスはzshプロセスに完全に置き換えられます。

この方法は完璧ではありませんが、ほとんどの場合うまくいくはずです。ハードコードされた値の変更と比較して、互換性の問題が少なくなる場合があります。

StackOverflowのこの回答で最初に言及されています


これについては素晴らしいものや空想的なものはありませんが、最小限の手間で動作します。
leetNightshade 2018

3

でしたインストールマイません受け入れ答えに記載されたファイルを持っている(msys2_shell.batmingw32_shell.bat、およびmingw64_shell.bat)。

代わりに私のWin10システムは、インストールのMSYS2(インストーラファイルを使用してmsys2-x86_64-20161025.exe、1つのファイルを持っている)msys2_shell.cmdの行で:

set "LOGINSHELL=bash"

に変更bashしましたzsh。これまでのところ機能しているようです。


あなたの解決策はWin7では私にとってうまくいきませんでした
レットロール

1
申し訳ありませんが、これ以上の情報はありません。私はWSLに移動しましたが、これは私のニーズに合っています。幸運を。
xtian

これはwin10で私にとってはうまくいった
Jose

ただし、.exeファイルの1つからmsys2を起動する必要がある場合、これはシェルを設定しません。そのため、Alan Pearceの回答を調べます
Jose

1

解決策はありますが、現在使用している他の端末ではなく、ConEmuを使用する必要があります。でも試してみてください。私の意見では、これはWindowsで最高のターミナルアプリです。

まず、pacmanを使用してzshをインストールする必要があります。あなたはすでにこれまでに得ていると思います。次に、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_shell、WindowsにインストールされてMSYS2環境を起動するコマンドが-shell引数を受け入れるため、MSYS2開発者は明らかにセットアップを変更し続けます。

したがって、別のシェルを使用するには、MSYS2 / MinGW 32 / MinGW 64の1つまたは複数のランチャーのプロパティを編集し、ターゲットを更新して追加すること-shell zshもできます。(シェルがされている場合$PATH、十分なのですMSYS環境のため、あなたは完全なパスを必要としません。)

たとえば、Win7の[スタート]メニューの[MSYS2 64ビット]にある[MSYS2 MinGW 64ビット]ランチャーの場合:

目標: C:\msys64\msys2_shell.cmd -mingw64
目標: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh

アップグレードなどで変更が消去されないため、これは永続的に切り替える最も簡単で互換性のある方法のようです。

奇妙なことに、ランチャーは環境変数やレジストリエントリなどを考慮しません。-shellコマンドラインで渡されてオーバーライドされない限り、LOGINSHELL=bash最初に強制されるデフォルトが使用されます。


0

編集:以下は、MSYS2の以前のバージョンに適用されます。2020-01-21以降、これは不要になりました。FeRDの答えは最もうまくいくようです。

バッシュの代わりに魚を使いたかった。残念ながら、ここでのメソッドのほとんどは機能しませんでした。おそらく魚の構文が非常に異なるためです。

最も効果的だったのはexec fish、bashの開始時に最初に実行するというwzhdのアイデアでした。ただし、まだ問題がありました。bashを使用したい場合は、編集.bashrcしてその行を削除する必要がありました。なぜなら、それをfishから実行しても、別のfishインスタンスを開始するだけだからです。

最善の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がfishに置き換えられますが、bashコマンドラインが必要な場合でも、で起動できbashます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.