command
это встроенный bash, как мы можем видеть:
seth@host:~$ type command
command is a shell builtin
Итак, мы знаем, command
что обеспечивается нашей оболочкой, bash. Покопавшись, man bash
мы увидим, в чем его польза:
(с man bash
):
command [-pVv] command [arg ...]
Run command with args suppressing the normal shell function
lookup. Only builtin commands or commands found in the PATH are
executed. If the -p option is given, the search for command is
performed using a default value for PATH that is guaranteed to
find all of the standard utilities. If either the -V or -v
option is supplied, a description of command is printed. The -v
option causes a single word indicating the command or file name
used to invoke command to be displayed; the -V option produces a
more verbose description. If the -V or -v option is supplied,
the exit status is 0 if command was found, and 1 if not. If
neither option is supplied and an error occurred or command
cannot be found, the exit status is 127. Otherwise, the exit
status of the command builtin is the exit status of command.
По сути, вы бы использовали, command
чтобы обойти "нормальный поиск функции". Например, скажем, у вас есть функция в вашем .bashrc
:
function say_hello() {
echo 'Hello!'
}
Обычно, когда вы запускаете say_hello
в своем терминале, bash найдет функцию, названную say_hello
в вашем, .bashrc
прежде чем найдет, скажем, приложение с именем say_hello
. С помощью:
command say_hello
заставляет bash обходить свой обычный поиск функций и переходить прямо к встроенным или вашим $PATH
. Обратите внимание, что поиск этой функции также включает псевдонимы. Использование command
будет обходить как функции, так и псевдонимы.
Если -p
опция включена, bash обходит ваши $PATH
настройки и использует их по умолчанию.
Команды -v
or -V
flags bash выводят описание (короткое для -v
, длинное для -V
) команды.
Примечание. Как указывал souravc в комментариях, более простой метод поиска информации о встроенных командах оболочки можно найти здесь: Как заставить `man` работать для встроенных команд оболочки и ключевых слов?
command
моей машины.sudo apt-get install manpages-posix
. Он не установлен по умолчанию. смотрите здесьЭто встроенная команда оболочки Bash.
Единственное преимущество, которое я вижу с этой встроенной функцией, суммировано в следующем предложении текста справки:
Поэтому, если вы хотите выполнить программу (бинарный файл, сохраненный на вашем диске), и существует внутренняя функция оболочки с таким же именем, вы можете вызвать вашу программу, используя эту встроенную функцию.
И да,
command -v
даст такой же результат, как иtype
.Я нашел это также под панелью Dash.
источник
command (name)
игнорирует функции оболочки,command -v (name)
это не так.command -v (name) >/dev/null
Предполагается, что это переносной способ проверки существования команды с таким именем независимо от того, встроена ли она в оболочку, функция или внешняя утилита.command make
для вызова фактической программы make. К сожалению, у меня есть другие сценарии оболочки, которые сломались, когда среда AOSP начала добавлять дерьмо к тому, чтоmake
выводит программа, и это чертовски раздражало, когда я выясняла, откуда этот дополнительный вывод таинственным образом поступает.У этого есть два различных использования:
Одно из применений - игнорировать псевдонимы и функции и запускать исполняемый файл, найденный в PATH, даже если псевдоним или функция с тем же именем существует.
Как пример, я буду использовать псевдоним,
ls
который добавляет/
к именам каталогов:В интерактивной оболочке может быть удобнее использовать обратную косую черту перед именем команды в качестве альтернативы с более коротким синтаксисом:
Другое использование - найти команду, которая будет запускаться, когда имя команды не используется, с помощью этой опции
-v
. Кажется, это самый переносимый вариант POSIXwhich
.источник
command
полезно, например, если вы хотите проверить существование конкретной команды.which
включает псевдонимы в поиск, поэтому он не подходит для этой цели, поскольку вы не хотите, чтобы случайный псевдоним рассматривался как рассматриваемая команда.Другими словами, вы можете иметь небольшую функцию в сценарии оболочки, например:
А затем проверьте доступную команду (здесь
dialog
) следующим образом:источник
Это позволяет вам запускать команду оболочки, игнорируя любые функции оболочки.
http://ss64.com/bash/command.html
источник