ここまでの会話内容をもとに、ターミナルで何が起きているのかを、実例つきで整理したまとめです。
特に cd・pwd・ls・PATH・pyenv の関係がわかるようにしてあります。
cd が特別な理由type / which / PATH の見方source文字を入力する画面・アプリです。Mac の「ターミナル」や VS Code のターミナルなどがこれにあたります。
入力された文字列を読み取り、どのコマンドをどう実行するか判断する本体です。Mac では zsh が標準です。
| 種類 | 例 | 意味 |
|---|---|---|
| シェル内蔵コマンド | cd echo export |
シェル自身が持っている機能。シェルの状態を変えられます。 |
| 外部コマンド | ls grep python3 git |
実行ファイルとして存在するコマンドです。PATH を使って探されます。 |
| エイリアス | alias ll='ls -la' |
短い別名。実体ではなく置き換えルールです。 |
type cd
type pwd
type ls
cd is a shell builtin
pwd is a shell builtin
ls is /bin/ls
たとえば ls と入力すると、シェルはだいたい次の順で確認します。
ls
↓
/bin/ls が見つかる
↓
/bin/ls を実行
cd が特別な理由cd は単なる外部コマンドではありません。なぜなら、現在のシェル自身の作業場所を変える必要があるからです。
pwd
(cd /tmp)
pwd
このように () の中で実行すると、サブシェルで動くため、元のディレクトリは変わりません。
cd は「シェルの状態を変える」ので、内蔵コマンドになっています。type / which / PATH の見方typeその名前が、内蔵なのか、外部コマンドなのかを確認できます。
type ls
# ls is /bin/ls
whichPATH から見つかった実行ファイルの場所を表示します。ただし、pyenv などの仲介が入っていると、本体ではなく仲介先が出ることがあります。
which python3
echo $PATHコマンドを探すフォルダ一覧です。左から右へ優先されます。
echo $PATH
PATH は「コマンド探索ルート」です。source() で囲むと、一時的な別シェルでコマンドが動きます。
pwd
(cd /tmp; pwd)
pwd
./script.sh
これは通常、別プロセスで実行されます。そのため、スクリプト内で cd しても、元のターミナルには反映されません。
sourcesource script.sh
これは今のシェルでそのまま読み込むので、環境変数の変更や cd などが反映されます。
あなたの環境では python3 は直接本体を指しておらず、まず pyenv の shim を通っています。
which python3
type python3
/Users/user1/.pyenv/shims/python3
python3 is /Users/user1/.pyenv/shims/python3
本体は次のコマンドで確認できます。
pyenv which python3
# /Users/user1/.pyenv/versions/3.10.13/bin/python3
which python3 で見えた場所が、本物の Python とは限りません。shim は「受付係」で、本体ではありません。あなたの PATH には、次のような開発環境向けの経路が含まれていました。
/Users/user1/.local/bin
/opt/homebrew/opt/postgresql@16/bin
/opt/homebrew/Cellar/pyenv-virtualenv/1.2.4/shims
/Users/user1/.pyenv/shims
/Users/user1/.pyenv/bin
/opt/homebrew/bin
/usr/bin
/bin
...
/Users/user1/.pyenv/shims が上の方にあるので、python3 は pyenv 管理下で動きます。/opt/homebrew/bin があるので、Homebrew で入れたコマンドが使えます。/opt/homebrew/opt/postgresql@16/bin があるので、PostgreSQL のコマンドが優先的に見つかります。| コマンド | 用途 |
|---|---|
echo $SHELL |
今使っているシェルを確認する |
type cd |
内蔵コマンドか確認する |
type ls |
外部コマンドの実体を確認する |
which python3 |
PATH 上で見つかる python3 を確認する |
pyenv which python3 |
pyenv が実際に使う Python 本体を確認する |
python3 -c "import sys; print(sys.executable)" |
今まさに実行されている Python の実体を確認する |
echo $PATH |
コマンド探索ルートを確認する |
pwd |
今の作業ディレクトリを表示する |
cd はシェル内蔵コマンドで、今のシェルの場所を変えます。ls は外部コマンドで、PATH から探されます。python3 は pyenv の shim を経由して、Python 3.10.13 本体に渡されています。