現在私はmacOS Catalinaを使用していますが、複数のバージョンが同じです。
(/etc/zprofile
または/etc/profile
以前のバージョンでbashを使用している場合)デフォルトでは、次のものがあります。
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
さらにファイルを作成しました/etc/paths.d/android
。内容は
/Users/$USER/Library/Android/sdk/platform-tools
/Users/$USER/Library/Android/sdk/tools
/Users/$USER/Library/Android/sdk/tools/bin
ただし、端末を実行すると、端末は次のフォルダにバイナリを見つけることができません。
zsh: command not found: adb
理由はわかりませんが、解決策は以下のようにパスヘルパー行をコピーすることです。
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
eval `/usr/libexec/path_helper -s`
fi
もしそうなら、私の質問は次のようになります。なぜこれが起こり、この回避策は実際にどのように機能しますか?
更新するたびに削除されるため、回避策は疲れました。
**編集する**
重複なし:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Users/\$USER/Library/Android/sdk/platform-tools:/Users/\$USER/Library/Android/sdk/tools:/Users/\$USER/Library/Android/sdk/tools/bin:/Users/\$USER/Library/Flutter/bin:/Applications/Wireshark.app/Contents/MacOS:/Users/$USER/Library/Android/sdk/platform-tools:/Users/$USER/Library/Android/sdk/tools:/Users/$USER/Library/Android/sdk/tools/bin:/Users/$USER/Library/Flutter/bin"; export PATH;
print -lr -- $path[@]
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Applications/VMware Fusion.app/Contents/Public
/Users/$USER/Library/Android/sdk/platform-tools
/Users/$USER/Library/Android/sdk/tools
/Users/$USER/Library/Android/sdk/tools/bin
/Users/$USER/Library/Flutter/bin
/Applications/Wireshark.app/Contents/MacOS
重複した項目があります。
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Users/\$USER/Library/Android/sdk/platform-tools:/Users/\$USER/Library/Android/sdk/tools:/Users/\$USER/Library/Android/sdk/tools/bin:/Users/\$USER/Library/Flutter/bin:/Applications/Wireshark.app/Contents/MacOS:/Users/$USER/Library/Android/sdk/platform-tools:/Users/$USER/Library/Android/sdk/tools:/Users/$USER/Library/Android/sdk/tools/bin:/Users/$USER/Library/Flutter/bin:/Users/guness/Library/Android/sdk/platform-tools:/Users/guness/Library/Android/sdk/tools:/Users/guness/Library/Android/sdk/tools/bin:/Users/guness/Library/Flutter/bin"; export PATH;
print -lr -- $path[@]
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Applications/VMware Fusion.app/Contents/Public
/Users/$USER/Library/Android/sdk/platform-tools
/Users/$USER/Library/Android/sdk/tools
/Users/$USER/Library/Android/sdk/tools/bin
/Users/$USER/Library/Flutter/bin
/Applications/Wireshark.app/Contents/MacOS
/Users/guness/Library/Android/sdk/platform-tools
/Users/guness/Library/Android/sdk/tools
/Users/guness/Library/Android/sdk/tools/bin
/Users/guness/Library/Flutter/bin
答え1
解決策として、これが私がしたことです。私はまだ代替ソリューションで開いていますが、参考のためにここに私のソリューションを置きました。
if [ -x /usr/libexec/path_helper ]; then
paths=`/usr/libexec/path_helper -s`
eval ${paths//'\$USER'/$'$USER'}
fi
path_helper
これは、最初の呼び出しが次のようにエスケープされた文字列を使用してパス変数を生成するためです。/Users/\$USER/Library
そして私の解決策は、評価する前にエスケープをオフにすることでした。
それでもありがとう@Gilles「だから邪悪な行動はやめなさい」問題を特定するのに役立ちます。