cygwinがWindowsホームで起動するため、Cygwin .bashrcがソースにならない


9

注:問題の更新については、以下の2番目の編集を参照してください。

Cygwinは先週まで私のためにうまく働いていました。現在、.bashrcはソース化されていません。何かをインストールまたは変更したはずですが、問題の原因を正確に思い出せません。Cygwinを起動すると、Windowsのホームにいて、エイリアスが機能しません。手動で.bashrcを入手する必要があります。以下は私のCygwin.batです。

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

何か案は?

編集:私の.bash_profileには以下が含まれています、

# source the users bashrc if it exists
if [ -f "${HOME}/.bashrc" ] ; then
  source "${HOME}/.bashrc"
fi

EDIT2:重要!Cygwinを起動すると、Windowsのホームフォルダーから起動します。私は.bash_profileと.bashrcをこのフォルダーに入れてみましたが、それらは正しく供給されました!これは、Cygwinが通常のCygwinホームフォルダーではなくWindowsホームフォルダーで起動する理由を解明することで問題が軽減されたことを意味します。

EDIT3:grep Gulshan / etc / passwd /を実行した結果

$ grep Gulshan /etc/passwd
Administrator:unused:500:513:U-Gulshan-HP\Administrator,S-1-5-21-1235613160-4193452482-2032876723-500:/home/Administrator:/bin/bash
Guest:unused:501:513:U-Gulshan-HP\Guest,S-1-5-21-1235613160-4193452482-2032876723-501:/home/Guest:/bin/bash
Gulshan:unused:1000:513:U-Gulshan-HP\Gulshan,S-1-5-21-1235613160-4193452482-2032876723-1000:/home/Gulshan:/bin/bash

bashシェルが起動すると(そしてWindowsホームディレクトリに移動します)、何がecho $HOME印刷されますか?
キーストンプソン

Cygwinのホームではなく、Windowsのホームをエコーし​​ます。
gsingh2011 2012年

しかし、Cygwin構文を使用しますよね?(/cygdrive/c/Users/fooではなくC:\Users\foo
Keith Thompson

はい、Cygwin構文を使用します。
gsingh2011

あなたが入力したとき、何が起こるHOME=/home/yourname bash -l、端末プロンプトで?私が正しい場合は、これでシェルが正しく動作するはずです。これは診断であ​​り、せいぜい回避策であり、解決策ではないことに注意してください。$HOMEそもそもなぜあなたが間違っているのかを理解する必要があります。根本的な問題は、の誤った設定です$HOME。bashは正しく動作しています。
キーストンプソン

回答:


9

Cygwinのよくある質問はどのように説明して$HOME設定されます。

WindowsからCygwinを起動する場合、HOME優先度の高い順に次のように決定されます。

  • HOME Windows環境から、POSIX形式に変換されます。
  • のエントリ /etc/passwd
  • /home/USERNAME

ネットワーク(telnet、ssh、...)からCygwinを使用する場合、HOMEから設定され/etc/passwdます。

HOMEなどの値/cygdrive/cに設定されている場合は、Windowsで設定されている可能性があります。DOSコマンドウィンドウを起動し、入力set HOMEしてこれが事実かどうかを確認します。

共有ドライブへのアクセスは、ネットワークから開始すると制限されることがよくあります。そのため、ドメインユーザーはHOME、Windows環境(共有ドライブ上)と/etc/passwd(ローカルドライブ上)で異なる環境を使用したい場合があります。sshは/etc/passwd、無視する ことのみを考慮していることに注意してくださいHOME

私の推測では、/etc/passwdファイルをめちゃくちゃにしたと思います。(Windowsのホームディレクトリは%USERPROFILE%ではなく%HOME%です。)

何をgrep USERNAME /etc/passwd印刷USERNAMEしますか(ユーザー名に置き換えます)?


出力を質問に追加したので、読みやすくなっています。正しく設定されているようです。ただし、Windows環境変数を開いて、%HOME%変数が存在するかどうかを確認し、%USERPATH%に設定しました。削除しましたが、問題は解決しませんでした。多分それは再起動が必要ですか?
gsingh2011

1
システムコントロールパネルから削除しましたか、それともWindowsコマンドシェルから削除しましたset HOME=か?システムコントロールパネルを使用すると動作する可能性が高くなりますが、それでも再起動が必要になる場合があります。
キーストンプソン

スタートメニューの[コンピューター]を右クリックし、[プロパティ]、[システムの詳細設定]、[環境変数]の順にクリックして、ホームを削除しました。再起動が必要でした。これでCygwinは正しいホームディレクトリをロードします。助けてくれてありがとう。
gsingh2011

1

.profileまたは.bash_profileがある場合、それはログインシェルから供給され、を渡すとログインシェルを取得します--login。.profileを入手した場合、bashは.bashrcを入手しません

私は入れようとします:

[ -f $HOME/.bashrc ] && source $HOME/.bashrc

.profileで、それが役立つかどうかを確認してください。.bashrcは、通常どおり、他の非ログインシェル呼び出しで引き続きソースにする必要があります。

そして-i、bashにパスしないでください。あなたはそれを必要としません。あなたが-iコマンドラインで与えたふりをするハックのような種類のバッシュ。


私の.bash_profileと.profileには同様のコード行があります。私の更新された質問を参照してください。
gsingh2011

すみません、@ Rich Homolkaですが、なぜそれ-iが必要ではないと言うのですか。ありがとう。
Sopalajo de Arrierez 2014年

@SopalajodeArrierez対話型(スクリプトではなく、ターミナルでアクティブ)シェルがある場合、bash -iはコマンドラインで指定したふりをします。bashシェルウィンドウを開いてみてください。するとecho $-i(おそらく他のフラグも)表示されるはずです
Rich Homolka

1

私は同じ動作を経験しました-おそらくgit(Windows)をインストールした後でしょう。

システム設定で、ユーザー変数HOME = C:\ Users \ meを見つけ、これをHOME = D:\ homeにリセットしました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.