web-dev-qa-db-ja.com

Windows&Git Bash:Windows%PATH%システム変数を読み取るためのBash PATH

最近、コントロールパネル->システム->システムの詳細設定->環境変数->ユーザー変数-> PATHと進み、Windows PATHにディレクトリを手動で追加しました。 (Windows 7、64ビット。)

再起動してcmd.exeを起動した後、echo %PATH%はこれが機能したことを示します。出力に最近追加したディレクトリが表示されます。

ただし、Git Bashを起動した後、echo $PATHの出力にはこのディレクトリが含まれません。

Bashrcにexport PATH=$PATH:/c/my/pathを追加することもできますが、Git BashはWindowsからPATHを取得するだけなので、2つの場所にパスを追加することを覚えておく必要はありません。どうすればこれを達成できますか?

(より一般的な関連質問は、Git Bashの$ PATHを設定するものです。Windowsの%PATH%にあるもののいくつかがGit Bashの$ PATHにあるものとないものがあります。すべてが以前に起こったこと$ PATHに触れるGit Bashプロンプトが表示されますか?)

28
Ahmed Fasih

Msysgit git bashセッションはスクリプト share/WinGit/Git Bash.vbs 、これは環境変数PATHにアクセスまたは変更しません(例 この無関係なvbsスクリプトなど

Git bashセッションは、現在のPATHの前に追加するだけです。

.:/usr/local/bin:/mingw/bin:/bin:

Msysgitと一緒にパッケージ化されたmingwセッションが別のmingwインストールからのbinを考慮しない可能性があります。別の(より単純な)ディレクトリをPATHに設定してそれを確認し、それがあなたのgit bashセッションでまだ見えています。そうでない場合は、PATHに追加するallディレクトリに関するより一般的な問題です。

6
VonC

これが同様の問題(Windows 10のMSYS2 bash)に対する私の小さな回避策です。

アイデアは、必要なパスをUnixスタイルのパスに変換し、bash $ PATHに追加することです。すべて.bashrcで行われます。

Win PATHに必要なパスを追加しないでください。代わりに、MSYS2_WINPATHのようにWindowsで新しいenv varを作成し、セミコロンで区切られたすべてのWindowsパスディレクトリをこの変数に追加します。 %MSYS2_WINPATH%を%PATH%に追加します。

これを.bashrcに挿入します-

################################## Construct PATH variable ##################################

winpath=$(echo $MSYS2_WINPATH | tr ";" "\n" | sed -e 's/\\/\\\\/g' | xargs -I {} cygpath -u {})
unixpath=''

# Set delimiter to new line
IFS=$'\n'

for pth in $winpath; do unixpath+=$(echo $pth)":"; done

export PATH=$(echo $PATH:$unixpath | sed -e 's/:$//g')
unset IFS
unset unixpath
unset winpath

################################# Constructed PATH variable #################################
6
anubhav

ユーザーのPATH変数が環境のPATH変数に連結された後でPATH値が長すぎる場合、WindowsはユーザーPATH変数の連結に失敗します。

これは、新しいソフトウェアがインストールされてPATHに何かが追加された後、既存のインストール済みソフトウェアが破損することで簡単に発生します。 Windowsが失敗する!

最良の修正は、コントロールパネルのPATH変数の1つを編集し、不要なエントリを削除することです。次に、新しいCMDウィンドウを開き、すべてのエントリが「echo%PATH%」に表示されているかどうかを確認します。

2
Tony OHagan

ディレクトリをパス変数の先頭に移動してみてください。 p4mergeをインストールした後、同じ問題が発生しました。 perforceディレクトリがパスに追加され、p4mergeはcmd.exeによって見つかりましたが、git Shell(mingw)では見つかりませんでした。無駄な検索の後、変数を編集して、perforceディレクトリがパスの最初に表示されるようにしました。 git Shellを起動すると、実際には、ディレクトリは$ echo $pathの出力に含まれ、$ p4mergeはp4mergeを開きます。

なぜそれが機能するのか私には分からないので、これは一種の不十分な答えですが、回避策が他の誰かを助けるなら、素晴らしいです。

1
gilly3