Недавно я нашел команду: command, которая не имеет ручного ввода, но помогает отображать следующее:
$ 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 -v альтернативой which?
Какие аргументы принимаются этой командой, а . [F3] является альтернативой which?
Это встроенная команда оболочки Bash.
Единственное преимущество, которое я вижу с этим встроенным, суммируется в следующем предложении текста справки:
Can be used to invoke commands on disk when a function with the same name exists
Итак, если вы хотите выполнить программу (двоичный файл, сохраненный на некотором вашем диске), и существует внутренняя функция оболочки с тем же именем, вы можете вызывать свою программу с помощью этого встроенного.
И да, command -v даст тот же результат, что и type.
Я нашел его также под оболочкой Dash.
Он имеет два разных назначения:
. Одно использование - игнорировать псевдонимы и функции и запускать исполняемый файл, найденный в PATH, даже если существует псевдоним или функция с тем же именем. [!d1 ]
В качестве примера я буду использовать псевдоним для ls, который добавляет имена / к каталогам:
$ alias ls='ls --classify'
$ ls -d .
./
$ command ls -d .
.
В интерактивной оболочке может быть удобнее использовать обратная косая черта перед именем команды как альтернатива, более короткий синтаксис:
$ \ls -d .
.
Другое использование - aliases , которое будет выполняться, когда имя команды не будет использоваться с помощью опции -v. Кажется, это самый портативный / POSIX-вариант which.
$ command -v ls
alias ls='ls --classify'
$ command -v sed
/bin/sed
Он позволяет запускать команду оболочки, игнорируя любые функции оболочки.
http://ss64.com/bash/command.html
command полезен, например, если вы хотите проверить наличие конкретной команды. which включает псевдонимы в поиск, поэтому он не подходит для этой цели, потому что вы не хотите, чтобы случайный псевдоним рассматривался как соответствующая команда.
Другими словами, вы можете иметь небольшой функцию в сценарии оболочки следующим образом:
exists() {
command -v "$1" >/dev/null 2>&1
}
И затем проверить доступную команду (здесь dialog), например:
if ! exists dialog ; then
echo "This script requires 'dialog'."
echo "Install it with 'sudo apt-get install dialog', then try again!"
exit 1
fi