私は Windows 7 で Cygwin を使用しています。私は Windows ユーザーではないので、OS と私が好んで使用しているシェルである Zsh の間にこの追加レイヤーが必要なのは、私にとってはすでに少し不便です。
現在、Windows で PATH を頻繁に変更する必要があります。これは、システムの詳細設定で変更するものです。ただし、この PATH の変更は Cygwin の Zsh には反映されないことに気付きました。
わかりました。それで、 を調べてみる.zshrc
と、次のことがわかりました。
# User configuration
export PATH="/usr/local/bin:/usr/bin:/cygdrive/c/Program Files (x86)/Intel/iCLS Client:/cygdrive/c/Program Files/Intel/iCLS Client:/cygdrive/c/Program Files/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Program Files (x86)/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files (x86)/Windows Live/Shared:/cygdrive/c/Program Files (x86)/Intel/OpenCL SDK/3.0/bin/x86:/cygdrive/c/Program Files (x86)/Intel/OpenCL SDK/3.0/bin/x64:/cygdrive/c/Program Files/Intel/Intel(R) Management Engine Components/DAL:/cygdrive/c/Program Files/Intel/Intel(R) Management Engine Components/IPT:/cygdrive/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/cygdrive/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/IPT:/cygdrive/c/Program Files/ffmpeg/bin"
# export MANPATH="/usr/local/man:$MANPATH"
私はそれを追加しませんでした (まあ、ffmpeg
最後の部分は追加したかもしれませんが)。これはどこから来たのでしょうか? Cygwin は Zsh をインストールするときに最初にこれを設定しますか? Oh-my-zsh は何らかの方法でこれを把握しますか? 何らかの方法で、ある時点で PATH を認識し、それを に追加したに違いありません.zshrc
。
Cygwinの起動時にすべてのWindows環境変数がインポートされます
しかし、そうではないようです。または、内export PATH
の宣言によって、.zshrc
Cygwin が行うすべての処理が上書きされます。
言うまでもなく、私は非常に混乱しています。そこで質問です。
Windows PATH を編集する場合、変更があったことを Cygwin シェルに通知する推奨方法は何ですか? シェル プロファイルを常に手動で編集する必要がありますか? それとも、自動生成できますか?
答え1
上のインストールoh-my-zsh のスクリプトは次のようになります:
echo "\033[0;34mCopying your current PATH and adding it to the end of ~/.zshrc for you.\033[0m"
sed -i -e "/export PATH=/ c\\
export PATH=\"$PATH\"
" ~/.zshrc
Cygwin シェル上の PATH (Cygwin を起動したときに Windows からコピーされたもの) は、インストール中に .zshrc に追加され、事実上ロックされます。
Cygwin は起動時にこれらの環境変数を取得し、.zshrc (および .zshenv などの他のファイル) を実行して、エクスポートされた環境変数を上書きします。
.zshrc から export ステートメントを削除すると、Zsh は親プロセスから PATH を取得するだけになります。これは Windows の PATH である必要があります。