コマンド存在スルか調査するコマンドに command が使えます。
$ command -v ls ; echo $? alias ls='ls --color=auto' 0
シェルの実行結果は 1/0 で戻されています。
echo $?
は直前のシェルの実行結果$?
を出力しています。正常終了なら0 異常終了なら $? > 0 が返されます。
あるとき
$ command -v ls ; echo $? alias ls='ls --color=auto' 0
ないとき
command -v lsaaa > /dev/null ; echo $? 1
command コマンドとは?
commandコマンド
はその名前の通りコマンドを実行するプログラムでもあります。
$ command php -v PHP 7.4.9 (cli) (built: Aug 7 2020 14:55:48) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies
マニュアルにもある通り、通常は type を使います。
ヘルプには、次のように書いてあります。
-v コマンドの詳細をプリントする、これは 組み込みの type コマンドと同じ機能です。
なので、通常は type を使えばいいと思います。
type と command の違い
type は STDERRに出力されます。
$ type lsaaa -bash: type: lsaaa: not found
command コマンドは、何も出ません
$ command -v lsaaa $
bashrc などに書くときに、シェルのリダイレクトの書き方に差が出ます。
type では stderr を消さなくちゃいけないのに対し、command コマンドを使うなら、リダイレクトは1つで済みます。
command -v lsaaa > /dev/null && echo exists type lsaaa > /dev/null 2>/dev/null && echo exists
マニュアル
help command command: command [-pVv] command [arg ...] Execute a simple command or display information about commands. Runs COMMAND with ARGS suppressing shell function lookup, or display information about the specified COMMANDs. Can be used to invoke commands on disk when a function with the same name exists. Options: -p use a default value for PATH that is guaranteed to find all of the standard utilities -v print a description of COMMAND similar to the `type' builtin -V print a more verbose description of each COMMAND Exit Status: Returns exit status of COMMAND, or failure if COMMAND is not found.
検索エンジンの最適化による 困った問題
commandコマンド
はその名前の通りコマンドを実行するプログラムでもあります。
しかし、その名前が「あまりに汎用的」な名前であるために、検索でキーワード無視されたり、インデックスの結果をうまく取り扱ってもらえません。
つまり、とっても検索をしにくい名前なんですね。