以下の内容はhttps://blog-smatsuzaki.hatenablog.com/entry/2025/06/05/180328より取得しました。


インストールしたCLIコマンドがwhichで確認できない時の確認観点

経験したこと

Ubuntuにnvmコマンドを入れたい」となり、公式ドキュメントの手順でインストールをした。

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

その後、 which コマンドでパスを確認してから、実行しようとしたのだけど、「whichコマンドでは見つからないが、実行できる」結果となり、少し混乱した。

$ which nvm
$
$ nvm -v
0.40.3

Geminiに聞いてみた

Geminiに聞いてみたところ、要旨として以下のような回答だった。また、今回の nvm は「シェル関数」に該当するようだった。

そして、

whichコマンドは、基本的に環境変数 PATH に設定されたディレクトリ群の中から、指定された名前の実行可能ファイルを探し出し、そのフルパスを表示するものです。エイリアス、シェル関数、シェルビルトインコマンドは、この検索メカニズムの対象外となるため、whichでは見つからない(または異なる表示になる)のです。

とのこと。

※追記: bashwhich cd すると、 cd: shell built-in command って出たのでこの解説があっているかは怪しい。

A. LinuxのShellで実行可能なCLIコマンドにはいくつかの種類がある

  1. 外部ファイル
  2. Shellの組み込みコマンド
  3. alias
  4. シェル関数

B. 実行しているコマンドがどれに該当するかは type コマンドで確認が可能

1. 外部ファイルの場合

ファイルパスが表示される。

$ type lsof
lsof is /usr/bin/lsof

2.Shellの組み込みコマンドの場合

shell builtin と表示される。

$ type cd
cd is a shell builtin

3.aliasの場合

xxx is aliased of ... と表示される。

$ type ll
ll is aliased to `ls -alF'

4.シェル関数

# シェル関数の宣言
$ myfunc() { echo "Hello from function"; }

# typeを実行するとコードが表示される
$ type myfunc
myfunc is a function
myfunc ()
{
    echo "Hello from function"
}



以上の内容はhttps://blog-smatsuzaki.hatenablog.com/entry/2025/06/05/180328より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14