本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、エイリアスや関数以外の指定したコマンドを実行する「command」コマンドです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、エイリアスや関数以外の指定したコマンドを実行する「command」コマンドについて紹介します。
「command」はエイリアスや関数以外の指定したコマンドを実行するコマンドです。「type」コマンドと同様、シェルが実際には何を実行するのかを表示することもできます。
commandコマンドはbashの内部コマンド(ビルトインコマンド、シェルコマンド)です。このため、「man」コマンドではなく、helpコマンドや「man bash」の結果から、詳細を確認します。
command [オプション] コマンド [コマンドのオプションや引数]
※ [ ]は省略可能な引数を示しています。
短いオプション | 意味 |
---|---|
-p | コマンドを探すパスを指定する(通常は環境変数PATHを使用) |
-v | 「コマンド」を実行せず、実行対象となるコマンドやファイル名、エイリアスの定義を表示する |
-V | 「コマンド」を実行せず、実行対象となるコマンドの詳細な情報を表示する(「type コマンド」相当) |
「command コマンド」で、「コマンド」という名前の関数やエイリアスを無視して、「コマンド」という名前の内部コマンドか外部コマンドを環境変数PATHに従って実行します。
例えば、CentOSでは、デフォルトで「ls」というエイリアスが設定されています。「ls」を実行すると、エイリアスを実行しますが、「command ls」とすると、エイリアスではなく「/usr/bin/ls」そのものを実行します(※1)。
※1 Ubuntuの場合もlsというエイリアス(ls --color=auto)が設定されている。外部コマンドのlsは「/bin/ls」にあり、CentOSとはパスが違うものの、commandコマンドの効果は同じだ。
オプションや引数がある場合はコマンド名に続けて指定します。例えば「command ls -l /bin」で、「/usr/bin/ls -l /bin」を実行します。
command ls
(エイリアスや関数ではなくlsコマンドそのものを実行する)
command ls -l /bin
(「ls -l /bin」を実行する)
画面1では、どのコマンドを起動するのかを表示するtypeコマンドを使って、通常時の実行内容を確認しています。
エイリアスを無視して元のコマンドを実行する方法は、commandコマンド以外にも幾つかあります。まず、「\ls」や「"ls"」のようにエスケープすることで、エイリアスではなくコマンドそのものを実行します。しかし、指定したものと同名の関数があった場合は、関数を実行してしまいます。
外部コマンドを実行したい場合に限り、commandコマンドを使わなくても「/usr/bin/ls」のようにパス名を指定することで、エイリアスや関数ではなくコマンドそのものを実行できます。
さらに「builtin」コマンド(連載第153回)を使うと、エイリアスと内部コマンドの両方で同じ名前のコマンドが見つかった場合、内部コマンドを実行します。しかし、builtinコマンドでは外部コマンドを実行することはできません。
Copyright © ITmedia, Inc. All Rights Reserved.