web-dev-qa-db-ja.com

Cygwinでデフォルトシェルを設定する

私はCygwinをかなり長い間使用しています。バッシュからフィッシュに切り替えたいと思います。誰もがchsh -s /usr/bin/fishを使うべきだと言っていますが、どういうわけか、chshは私にはうまくいきません。 Cygwin.batファイルを変更しようとしても機能せず、/etc/passwdファイルも変更できません。

何が起こっているのか本当にわかりません。誰か助けてくれませんか?

23
Alex

私はランダムに同じ問題に遭遇します、そして今私はあなたに私の解決策を提供します。

0- cygwinmintty.exeで開きます

1-passwdファイルを手動で作成します(mkpasswd

$mkpasswd > /etc/passwd

2-passwdファイルのデフォルトシェルを変更します

$vim /etc/passwd
user:*:1976XX:1971XX:U-user\user,S-1-5-21-XXXX:/home/user:/bin/fish

3-再起動mintty.exe

15
Kir Chou

/ etc/passwdの代わりに/etc/nsswitch.confを編集してみてください

Cygwin 推奨 であるpasswdファイルを作成する代わりに1、可能性があります / etc/nsswitch.confを編集 。次の行を追加または編集します。

 db_Shell:/ usr/bin/fish 

この方法の欠点は、複数のユーザーがいる場合、この変更がすべてのユーザーに影響することです。良い面/良い面は、それが非常に単純であるということです。唯一の問題は、Cygwinを再起動する必要があることです。

この変更後にdomkpasswdを使用すると、ログオンが許可されているすべてのユーザーに対して新しいデフォルトのシェルが使用されます。


参考文献

1mkpasswdドキュメントには次のように書かれています。

本当に必要な場合を除いて、このコマンドを使用してローカルの/ etc/passwdファイルを生成しないでください。詳細については、Cygwinユーザーガイドを参照してください。

ユーザーガイド には、ユーザーとグループの場合は/etc/passwdファイルと/etc/groupファイルを再生成する必要があるという言及以外に確かな理由は見つかりません。変化、それはまともな十分な理由だと思います。このプロセスは、初心者にとっては多少エラーが発生しやすいと言えます。

32
P Daddy

SuperUser には、さらに簡単な答えがあります。 Windowsでシェル環境変数を設定します。好みのシェルに設定します(例:/bin/tcsh)および新しく起動されたシェルはそれを使用する必要があります。

環境変数を設定するには:

  1. 「システム」コントロールパネルに移動します(「スタート」メニューを右クリックして「システム」を選択します)
  2. 左側の列の「システムの詳細設定」をクリックします
  3. ポップアップ表示される[システムプロパティ]ウィンドウで、[環境変数...]ボタンをクリックします。
  4. [ユーザー変数]または[システム変数]ボックスのいずれかで(変更を自分だけに影響させるか、すべてのユーザーに影響させるかによって異なります)、[新規...]ボタンをクリックします。
  5. [変数名]ボックスに「シェル」と入力し、[変数値]ボックスに希望のシェルへのパス(Cygwinファイルシステムからの相対パス)を入力します。
  6. 開いている3つのウィンドウで[OK]をクリックして、変更を保存します。
5
David C.

Cygwinを実行している場合ConEm最も簡単な方法は、デフォルトのシェルの代わりにコマンドラインを置き換えてfishを実行することです(Settings-> Startup-> Tasks):""c:\cygwin64\bin\fish.exe" --login -i"(それに応じてcygwinフォルダーへのパスを変更してください)

3
apieceofbart

受け入れられた回答についてコメントしたかったのですが、担当者が足りませんでした。

この方法について

$ mkpasswd > /etc/passwd

これは/ etc/passwdファイルを生成するために機能しますが、cygwinを自分でインストールしている可能性があり、コンピューターがドメインに属している場合、mkpasswdが不足し、ドメインユーザーリスト全体を消費しようとする可能性があります。まさにこの状態の500MB以上の/ etc/passwdファイルがあり、ファイルを削除するまでcygwinは起動しませんでした。

Mkpasswdルートを使用して-cスイッチを使用する場合は、自分だけのエントリを入力することを強くお勧めします。

$ mkpasswd -c > /etc/passwd

共有cygwinサービスを備えたマシン(書き込み権限がある場合)

$ mkpasswd -c >> /etc/passwd

3
Bob Smith

これがソリューションの「適切」であるかどうかはわかりませんが、/usr/bin/zsh; exitファイルの最後に.bashrcを追加しました。選択したシェルへのパスを/usr/bin/zshに置き換えることができます。これまでのところ問題なく動作しているようです。

2
element15

c:\cygwinまたはc:\cygwin64(cygwinのホームディレクトリは何でも)に移動し、cygwin.batを編集します。の代わりに

bash --login -i

たとえば、

rem bash --login -i
tcsh -l
0
user31264

Cygwinのデフォルトのシェルをzshに変更しようとしていたところ、ここでの回答の一部が役に立ちましたが、完全な解決策はありませんでした。私が見つけた最良の手順は、RobbyRusselによるohmy zsh githubリポジトリの「installingzsh」手順にありました ここ

ページの上部には、zshをインストールするための一般的な手順と、さまざまなプラットフォーム向けの特定の手順があります。 Cygwinセクションまで下にスクロールして、次の手順を実行できます。

「デフォルトのシェルを変更する最も簡単な方法は、シェルのユーザー環境変数を設定することです。「アカウントの環境変数の編集」を検索して環境変数ウィンドウを表示し、「シェル」という名前の新しい変数を作成して、値を指定します。/usr/bin/zsh/"。"

(Windows 7の場合:Windowsキーを押します。「environment」の入力を開始します。表示されたら、「アカウントの環境変数の編集」を選択し、上記のように新しい変数を追加します。)

これを行った後、Cygwin Shellウィンドウを閉じて再度開き、echo $ Shellで動作することをテストしました。期待される結果:/ bin/zshまたは同様のもの。

お役に立てれば!

0

これを行う簡単な方法の1つは、.bashrcファイルの最後でtcshを呼び出すことです。

#     x2=$(dirs +${cnt} 2>/dev/null)
#     [[ $? -ne 0 ]] && return 0
#     [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
#     if [[ "${x2}" == "${the_new_dir}" ]]; then
#       popd -n +$cnt 2>/dev/null 1>/dev/null
#       cnt=cnt-1
#     fi
#   done
#
#   return 0
# }
#
# alias cd=cd_func
tcsh
alias g=gvim
source ~/.cshrc
source ~/.aliases
0
advaneharshal