Cygwinでzshをデフォルトのシェルに設定するにはどうすればよいですか?
Cygwinをマルチユーザー環境として使用している場合を除き(この場合、標準環境での場合と同様にchsh
を使用してください。)
それ以外の場合は、cygwin.batをzsh -l -i
ではなくbash --login -i
を実行するように変更するだけで、ログインシェルとして実行されます。
もちろん、起動から複数のシェルを実行したい場合は、.bat
ファイルのセットを作成して、異なるシェルをロードします。 (sh
、ksh
、csh
、fish
など)
これを更新してchsh
なしでこれを行う方法に関する情報を提供する必要があると感じましたが、それでもUnix側でそれを行います。 /etc/passwd
ファイルを編集し、/bin/bash
を/bin/zsh
に置き換えます。 (これは実際にはchsh
が行うことですが、この方法では、すべてのsersに対して一度に実行できます。)
Cygwinディレクトリのbin
ディレクトリをWindowsパス環境変数に追加し、次のいずれかのショートカットを作成します。
mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login
または、デフォルトのcygwinスタートメニューのショートカットを同じものに変更します。
私があなたの質問を正しく読んだ場合、あなたは何かchereが提供するもの以外のものを探しています(当然ながら、それ自体はかなりクールです)。
Cygwinの現在のバージョンには/ etc/passwdファイルがなく、私が作業しているシステムのドメインデータベースにはWindowsアカウント情報がありません。その結果、chshはサポートされなくなりました。
また、bashはstartxwinスクリプトにハードコードされておらず、.batファイルにもハードコードされていないこともわかりました。 .batファイルをいじる必要がないことがわかります。
シェルの変更方法を検索したところ、mkpasswdに関するアドバイスが見つかりました
ミックスに追加しました。
マンページは言った:
SYNOPSIS mkpasswd [OPTIONS]... OPTIONS Don't use this command to generate a local /etc/passwd file, unless you really need one. See the Cygwin User's Guide for more information. -c,--current Print current user. DESCRIPTION The mkpasswd program can be used to create a /etc/passwd file. Cygwin doesn't need this file, because it reads user information from the Windows account databases, but you can add an /etc/passwd file, for instance if your machine is often dis‐ connected from its domain controller. Note that this information is static, in contrast to the informa‐ tion automatically gathered by Cygwin from the Windows account databases. If you change the user information on your system, you'll need to regenerate the passwd file for it to have the new information. For very simple needs, an entry for the current user can be cre‐ ated by using the option -c.
(間隔が「オフ」になっている理由がわかりません...)
次に、次のコマンドを使用しました。
mkpasswd -c | sed -e 'sX/bashX/zshX' | tee -a/etc/passwd
次回Cygwinターミナルを開くと、zshに直接移動します
そして、それがあなたが求めていたものだと私は思います。
Stack Overflow の私の回答からコピー:
Cygwin が推奨するpasswdファイルを作成する代わりに、1、 /etc/nsswitch.conf を編集できます。次の行を追加または編集します。
db_Shell:/usr/bin/zsh
この方法の欠点は、複数のユーザーがいる場合、この変更がすべてのユーザーに影響することです。アップ/アップの側面は、それが完全に単純であることです。唯一の問題は、Cygwinを再起動する必要があることです。
この変更後にdomkpasswdを使用すると、ログオンが許可されているすべてのユーザーに新しいデフォルトのシェルが使用されます。
1 mkpasswdのドキュメントには次のように書かれています:
本当に必要でない限り、このコマンドを使用してローカルの/ etc/passwdファイルを生成しないでください。詳細については、Cygwinのユーザーガイドを参照してください。
user's guide では、ユーザーが/ etc/passwdファイルと/ etc/groupファイルを再生成する必要があるという言及以外は、確かな理由を見つけることができません。そしてグループは変化します。それは十分な理由だと思います。このプロセスは、初心者には多少エラーが発生しやすいと言えます。
Mintty/Cygwinターミナルで使用されているシェルの変更に興味があるとすると、最初にシェル環境変数をチェックし、次に(現在は存在しない)passwdファイルをチェックしてから、/ bin/shにフォールバックします。デフォルトでは。
シェル環境変数Windowsの場合を/usr/bin/zsh
に設定でき、他の変更を加えなくても機能しました。グローバルではなく、Windowsユーザー向けに変更しました。
環境変数の設定は、Windowsのバージョンによって異なる可能性があります。 Windowsのコントロールパネルで「環境」を検索してみてください。私にとって、Windows 7では、コントロールパネル→システム→システムの詳細設定で、システムのプロパティコントロールパネル/ダイアログが表示され、次に詳細タブ、環境変数ボタンで環境変数ダイアログが表示され、値が/usr/bin/zsh
のShell
という名前の新しいユーザー変数。次に、これらすべてを元に戻し、新しいminttyを起動します。
それを探している人を助けるためにこの答えを追加したいと思っただけです。 chere(「Bash Prompt here」オプションを任意のフォルダーの右クリックコンテキストメニューに追加する)を使用する場合は、次のようにzsh(「Zsh Prompt Here」)に設定できます。
chere -i -t mintty -s zsh
IDE Intellij内でCygwin Shellを使用する場合は、settings/tools/terminal内で次の設定を使用します
c:\cygwin\bin\zsh.exe -l -i
これは、新しいウィンドウを生成する代わりに、cygwin Shellをintellij内に埋め込みます。