コマンドがエイリアス、関数、またはバイナリであるかどうかをテストする方法は?

コマンドがエイリアス、関数、またはバイナリであるかどうかをテストする方法は?

command がありますがfoo、それがバイナリなのか、関数なのか、エイリアスなのか、どうすればわかりますか?

答え1

Bash(または他のBourne様シェル)を使用している場合type

type command

commandシェルが組み込みであるか、エイリアスが何であるか(そうであればエイリアスが何であるか)、関数(そうであれば関数の本文がリストされています)であるか、それともファイルに保存されているか(そうであればそのファイルへのパス)を伝えます。ファイル)。

関数のエイリアスなど、入れ子になった状況がある可能性があります。その場合、実際の型を見つけるには、まずその型のエイリアスを解放する必要があります。

unalias command; type command

「バイナリ」ファイルの詳細については、次の手順を実行してください。

file "$(type -P command)" 2>/dev/null

commandエイリアス、関数、またはシェル組み込みの場合は何も返されませんが、スクリプトまたはコンパイルされたバイナリの場合はより多くの情報が返されます。

引用する

答え2

zshでは、配列を調べることがaliasesできfunctionsますcommands

(( ${+aliases[foo]} )) && print 'foo is an alias'
(( ${+functions[foo]} )) && print 'foo is a function'
(( ${+commands[foo]} )) && print 'foo is an external command'

また、builtins組み込みコマンドの場合です。

(( ${+builtins[foo]} )) && print 'foo is a builtin command'

編集:確認zsh/パラメータモジュール利用可能なアレイの完全なリストに関するドキュメント。

答え3

答えは、使用するシェルによって異なります。

zshの場合、シェルの組み込み機能がwhence -w望むものを正確に伝えます。

例えば

$ whence -w whence
whence : builtin
$ whence -w man     
man : command 

関連情報