最近、コントロールパネル->システム->システムの詳細設定->環境変数->ユーザー変数-> 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プロンプトが表示されますか?)
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ディレクトリに関するより一般的な問題です。
これが同様の問題(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 #################################
ユーザーのPATH変数が環境のPATH変数に連結された後でPATH値が長すぎる場合、WindowsはユーザーPATH変数の連結に失敗します。
これは、新しいソフトウェアがインストールされてPATHに何かが追加された後、既存のインストール済みソフトウェアが破損することで簡単に発生します。 Windowsが失敗する!
最良の修正は、コントロールパネルのPATH変数の1つを編集し、不要なエントリを削除することです。次に、新しいCMDウィンドウを開き、すべてのエントリが「echo%PATH%」に表示されているかどうかを確認します。
ディレクトリをパス変数の先頭に移動してみてください。 p4mergeをインストールした後、同じ問題が発生しました。 perforceディレクトリがパスに追加され、p4mergeはcmd.exeによって見つかりましたが、git Shell(mingw)では見つかりませんでした。無駄な検索の後、変数を編集して、perforceディレクトリがパスの最初に表示されるようにしました。 git Shellを起動すると、実際には、ディレクトリは$ echo $path
の出力に含まれ、$ p4merge
はp4mergeを開きます。
なぜそれが機能するのか私には分からないので、これは一種の不十分な答えですが、回避策が他の誰かを助けるなら、素晴らしいです。