MSYS2のデフォルトのシェルをbash
からzsh
に変更したいと思います。
私はchsh
を試しました-MSYS2では利用できません。
編集/etc/passwd
は何もしません。無視されているようです。
MSYS2のルートディレクトリにあるバッチスクリプトを確認しました。bash
はハードコードされています。/usr/bin/bash
から/usr/bin/zsh
、MinGWを使用するまでは問題なく動作しました。
可能であれば、MSYS2のシェルを(適切に)どこで変更できますか?
私はこの問題に遭遇しました。 zshを実行するには、次のようにしました。
mingw32_Shell.bat
_を実行しましたpacman -Syu
_を実行して、インストールされているすべてのパッケージをアップグレードしましたpacman -Sy zsh curl
_を実行してzshとcurlをインストールしましたexit
を実行してMinGWシェルを閉じた-インストール直後にzsh
を実行しなかった。start %WD%mintty -i /msys2.ico /usr/bin/bash --login %*
_のすべてのインスタンスを_start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %*
_に変更(2015年9月23日の39行目)mingw32_Shell.bat
_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)"
私は、バッチファイルではなく.exe
ランチャーを提供する新しいmsys2-launcherを使用してこれに遭遇しました。
このためには、Msys2ルートディレクトリ内のランチャーと一緒に.ini
ファイルを変更するだけでした(64ビットインストールの場合、msys2.ini
、mingw32.ini
およびmingw64.ini
)。これらのiniファイルごとに、シェルを設定する行を追加します。
Shell=/usr/bin/zsh
編集/etc/nsswitch.conf
、および以下の設定を変更します。
db_Shell: /bin/zsh
デフォルトのシェルの変更がサポートされていない場合、好きなシェルを使用する1つの方法は、デフォルトのシェルが起動したらすぐに起動することです。
たとえば、zsh
を~/.bashrc
に書き込むだけで、bashの起動時にzshが実行されます。 stray bashプロセスが実行されたままの状態で、ログアウトするときにシェルを2回終了する必要があります。より良くするために、zsh
の代わりにexec zsh
を記述します。これにより、bashプロセスがzshプロセスに完全に置き換えられます。
この方法は完璧ではありませんが、ほとんどの場合うまくいくはずです。ハードコードされた値の変更と比較して、互換性の問題が少なくなる場合があります。
StackOverflowに関するこの回答 で最初に言及されています。
私のインストールでは、承認された回答に記載されているファイル(msys2_Shell.bat
、mingw32_Shell.bat
、およびmingw64_Shell.bat
)がありませんでした。
代わりに、私のWin10システムインストール MSYS2 (インストーラーファイルmsys2-x86_64-20161025.exe
を使用)には、単一のファイルmsys2_Shell.cmd
があり、次の行が含まれています。
set "LOGINSHELL=bash"
bash
をzsh
に変更しました。これまでのところ機能しているようです。
私は解決策を持っていますが、現在使用している他の端末の代わりに ConEm を使用する必要があります。でも試してみてください。私の意見では、これは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にはたくさんのオプションがあるので、好きなように設定できると思います。
newestインストールでは、MSYS2環境を起動するためにWindowsにインストールされるmsys2_Shell
コマンドのため、MSYS2開発者は明らかに設定を変更し続けますs)は-Shell
引数を受け入れます。
したがって、別のシェルを使用するには、MSYS2/MinGW 32/MinGW 64の1つ以上のランチャーのプロパティを編集し、-Shell zsh
などを追加するようにターゲットを更新できます。 (シェルが十分なMSYS環境の$PATH
にある場合、フルパスは必要ありません。)
したがって、たとえばWin7スタートメニューの「MSYS2 64ビット」にある「MSYS2 MinGW 64ビット」ランチャー:
ターゲット:C:\msys64\msys2_Shell.cmd -mingw64
ターゲット:C:\msys64\msys2_Shell.cmd -mingw64 -Shell zsh
これは、アップグレードなどで変更が消去されないため、永続的に切り替える最も簡単で互換性のある方法のようです。
奇妙なことに、ランチャーは環境変数やレジストリエントリなどを考慮しません。コマンドラインで-Shell
を渡してオーバーライドしない限り、最初に強制されるLOGINSHELL=bash
デフォルトが使用されます。
編集:以下は、MSYS2の以前のバージョンに適用されます。2020-01-21以降、これは不要になりました。FeRDの回答が最適に機能するようです。
バッシュの代わりに魚を使いたかった。残念ながら、ここでのメソッドのほとんどは機能しませんでした。おそらく魚の構文が非常に異なるためです。
最も効果的だったのは、bzhの開始時に最初にexec fish
を実行するというwzhdのアイデアでした。ただし、まだ問題がありました。bashを使用したい場合は、.bashrc
を編集してその行を削除する必要がありました。fishから実行しても、別のfishインスタンスが起動されるだけだからです。
最善の方法は、msys2の開始時にexec fish
が確実に実行されるようにすることですが、bashが開始されるたびに実行されるとは限りません。
私が見つけた方法は、msys2のインストールフォルダーにあるmsys2_Shell.cmd
ファイルを介してです。私はこれらの行を見つけました:
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
で開始できます。