開発環境
> go version go version go1.18.4 darwin/amd64 > uname -v Darwin Kernel Version 22.1.0: Sun Oct 9 20:14:54 PDT 2022; root:xnu-8792.41.9~2/RELEASE_X86_64
モチベーション
XcodeのBuild Phasesで意図しない参照先のバイナリが実行されてしまった。これはPATHの優先度を意識していれば解決できた問題だった。ということで実際に2つのバイナリを別のディレクトリ配下に配置してPATHの優先度を見る。
準備
package main import ( "log" ) func main() { log.Println("executed in d1") // or "~ d2" }
go build
で適当なバイナリを作って2つディレクトリを用意してそれぞれに配置。
> tree
.
├── d1
│ └── tekitou
└── d2
└── tekitou
PATHの最後尾にパスを追加(検索優先度が低い)
パスを追加する。
> export PATH=${PATH}:~/d1 > echo $PATH ~{TOTEMO_NAGAI}:~/d1
実行する。
> tekitou 2022/11/18 01:19:04 executed in d1
PATHの先頭にパスを追加(検索優先度が高い)
(「最後尾 対義語」でググった。最後尾は単数っぽいけど最前列は複数っぽくて気持ちが悪いので先頭を採用)
パスを追加する。
> export PATH=~/d2:${PATH} > echo $PATH ~/d2:{TOTEMO_NAGAI}:~/d1
実行する。
> tekitou 2022/11/18 01:22:04 executed in d2
d1ディレクトリもPATHに含まれているが左(記述順)が優先されるので先頭に追加したd2ディレクトリ配下のバイナリが実行された。
優先度を意識していると何かのエラーハンドリング時に効きそう。PATH周り、パソコンの入門中の入門な気がしていて頭に無かったのがショック。愚直にやっていこう。