web-dev-qa-db-ja.com

Cygwinでのzsh

Cygwinでzshをデフォルトのシェルに設定するにはどうすればよいですか?

35
simao

Cygwinをマルチユーザー環境として使用している場合を除き(この場合、標準環境での場合と同様にchshを使用してください。)

それ以外の場合は、cygwin.batをzsh -l -iではなくbash --login -iを実行するように変更するだけで、ログインシェルとして実行されます。

もちろん、起動から複数のシェルを実行したい場合は、.batファイルのセットを作成して、異なるシェルをロードします。 (shkshcshfishなど)

更新...

これを更新してchshなしでこれを行う方法に関する情報を提供する必要があると感じましたが、それでもUnix側でそれを行います。 /etc/passwdファイルを編集し、/bin/bash/bin/zshに置き換えます。 (これは実際にはchshが行うことですが、この方法では、すべてのsersに対して一度に実行できます。)

45
ocodo

CygwinディレクトリのbinディレクトリをWindowsパス環境変数に追加し、次のいずれかのショートカットを作成します。

mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login

または、デフォルトのcygwinスタートメニューのショートカットを同じものに変更します。

17
Justin Buser

私があなたの質問を正しく読んだ場合、あなたは何か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に直接移動します

そして、それがあなたが求めていたものだと私は思います。

17
David L. Paktor

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ファイルを再生成する必要があるという言及以外は、確かな理由を見つけることができません。そしてグループは変化します。それは十分な理由だと思います。このプロセスは、初心者には多少エラーが発生しやすいと言えます。

7
P Daddy

Mintty/Cygwinターミナルで使用されているシェルの変更に興味があるとすると、最初にシェル環境変数をチェックし、次に(現在は存在しない)passwdファイルをチェックしてから、/ bin/shにフォールバックします。デフォルトでは。

シェル環境変数Windowsの場合/usr/bin/zshに設定でき、他の変更を加えなくても機能しました。グローバルではなく、Windowsユーザー向けに変更しました。

環境変数の設定は、Windowsのバージョンによって異なる可能性があります。 Windowsのコントロールパネルで「環境」を検索してみてください。私にとって、Windows 7では、コントロールパネル→システム→システムの詳細設定で、システムのプロパティコントロールパネル/ダイアログが表示され、次に詳細タブ、環境変数ボタンで環境変数ダイアログが表示され、値が/usr/bin/zshShellという名前の新しいユーザー変数。次に、これらすべてを元に戻し、新しいminttyを起動します。

4
wfaulk

それを探している人を助けるためにこの答えを追加したいと思っただけです。 chere(「Bash Prompt here」オプションを任意のフォルダーの右クリックコンテキストメニューに追加する)を使用する場合は、次のようにzsh(「Zsh Prompt Here」)に設定できます。

chere -i -t mintty -s zsh
1
Mike H-R

IDE Intellij内でCygwin Shellを使用する場合は、settings/tools/terminal内で次の設定を使用します

c:\cygwin\bin\zsh.exe -l -i

これは、新しいウィンドウを生成する代わりに、cygwin Shellをintellij内に埋め込みます。

0
serup