web-dev-qa-db-ja.com

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

MSYS2のデフォルトのシェルをbashからzshに変更したいと思います。

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

MSYS2のルートディレクトリにあるバッチスクリプトを確認しました。bashはハードコードされています。/usr/bin/bashから/usr/bin/zsh、MinGWを使用するまでは問題なく動作しました。

可能であれば、MSYS2のシェルを(適切に)どこで変更できますか?

14
sorbet

私はこの問題に遭遇しました。 zshを実行するには、次のようにしました。

  • インストールされたMSYS2
  • MSYS2をインストールしたディレクトリから_mingw32_Shell.bat_を実行しました
  • _pacman -Syu_を実行して、インストールされているすべてのパッケージをアップグレードしました
  • _pacman -Sy zsh curl_を実行してzshとcurlをインストールしました
  • exitを実行してMinGWシェルを閉じた-インストール直後に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年9月23日の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)"

8
livingstaccato

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

このためには、Msys2ルートディレクトリ内のランチャーと一緒に.iniファイルを変更するだけでした(64ビットインストールの場合、msys2.inimingw32.iniおよびmingw64.ini)。これらのiniファイルごとに、シェルを設定する行を追加します。

Shell=/usr/bin/zsh
24
Alan Pearce

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

db_Shell: /bin/zsh
5
Teh Hippo

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

たとえば、zsh~/.bashrcに書き込むだけで、bashの起動時にzshが実行されます。 stray bashプロセスが実行されたままの状態で、ログアウトするときにシェルを2回終了する必要があります。より良くするために、zshの代わりにexec zshを記述します。これにより、bashプロセスがzshプロセスに完全に置き換えられます。

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

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

4
wzhd

私のインストールでは、承認された回答に記載されているファイル(msys2_Shell.batmingw32_Shell.bat、およびmingw64_Shell.bat)がありませんでした

代わりに、私のWin10システムインストール MSYS2 (インストーラーファイルmsys2-x86_64-20161025.exeを使用)には、単一のファイルmsys2_Shell.cmdがあり、次の行が含まれています。

set "LOGINSHELL=bash"

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

3
xtian

私は解決策を持っていますが、現在使用している他の端末の代わりに 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にはたくさんのオプションがあるので、好きなように設定できると思います。

1
Okonomiyaki3000

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デフォルトが使用されます。

0
FeRD

編集:以下は、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で開始できます。

0
George T