.bash_profileの条件分岐 カレントディレクトリによるPATH優先順位変更

[Mac M2 Pro 12CPU, Sonoma 14.3.1, clang++ 15.0.0]

以前の記事”[AI] ローカルLLM検証 llama.cppのmake時にSegmentation fault:11発生 macOS”で.bash_profileを書き換え、PATHの優先順位を変えました。

何らかの弊害があるだろうと思っていましたが、早速問題が表出しました。

pythonコマンドで/usr/local/binにある普段使いのPython3.10.4ではなく、/usr/binにあるPython3.9.6(macOSのデフォルト)が呼び出されるようになりました。

ChatGPTに解決方法を教えてもらい、以下のように.bash_profileを書き換えました。

PROMPT_COMMAND="check_for_llama_cpp"
check_for_llama_cpp() {
    # grepファイルを読み込めるようにする
    export PATH=/usr/bin:$PATH

    if ls | grep -q "llama.cpp"; then
        # 'llama.cpp' を含むディレクトリの場合
        export PATH=/usr/local/bin:$PATH
        export PATH=/usr/bin:$PATH
    else
        # それ以外のディレクトリの場合
        export PATH=/usr/bin:$PATH
        export PATH=/usr/local/bin:$PATH
    fi
}

これでllama.cppをビルドする時だけPATHの優先順位が変わり、/usr/binが優先されます。カレントディレクトリが変わる度にPROMPT_COMMANDによるチェックが入る仕組みです。その度にPATHデータが増えていきますが、パフォーマンスに影響はないでしょう。

[Bash] 01 アプリの起動時間測定

[macOS Catalina 10.15.7]

Google Chromeを新しいウィンドウで起動する際の起動時間をBashで測定しました。

time open -na '/Applications/Google Chrome.app' --args --new-window
--------------------------------------------------

出力例
--------------------------------------------------
real	0m0.099s
user	0m0.012s
sys	0m0.013s