command
to wbudowane bash, jak widzimy:
seth@host:~$ type command
command is a shell builtin
Więc wiemy, że command
jest dostarczany przez naszą powłokę, bash. Zagłębiając się man bash
, możemy zobaczyć, jakie jest jego zastosowanie:
(z 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.
Zasadniczo użyłbyś command
do ominięcia „normalnego wyszukiwania funkcji”. Załóżmy na przykład, że masz funkcję w .bashrc
:
function say_hello() {
echo 'Hello!'
}
Zwykle po uruchomieniu say_hello
w terminalu bash znalazłby funkcję o nazwie say_hello
w niej, .bashrc
zanim znalazłaby, powiedzmy, aplikację o nazwie say_hello
. Za pomocą:
command say_hello
sprawia, że bash omija normalne wyszukiwanie funkcji i przechodzi bezpośrednio do wbudowanych lub twoich $PATH
. Pamiętaj, że to wyszukiwanie funkcji obejmuje również aliasy. Użycie command
spowoduje pominięcie zarówno funkcji, jak i aliasów.
Jeśli -p
opcja jest podana, bash omija Twój zwyczaj $PATH
i używa własnych ustawień domyślnych.
-v
Lub -V
flagi bash wypisuje opis (skrót -v
, długo -V
) polecenia.
Uwaga: Jak zauważył souravc w komentarzach, łatwiejszą metodę wyszukiwania informacji o wbudowanych powłokach można znaleźć tutaj: Jak sprawić, by `man` działał dla wbudowanych poleceń i słów kluczowych powłoki?
command
na mojej maszynie.sudo apt-get install manpages-posix
. Nie jest domyślnie instalowany. spójrz tutajJest to wbudowane polecenie powłoki Bash.
Jedyną zaletą, którą widzę z tym wbudowanym narzędziem, jest podsumowane w następującym zdaniu tekstu pomocy:
Jeśli więc chcesz uruchomić program (plik binarny zapisany na niektórych dyskach) i istnieje funkcja powłoki wewnętrznej o tej samej nazwie, możesz wywołać swój program za pomocą tego wbudowanego.
I tak,
command -v
da taki sam wynik jaktype
.Znalazłem to również pod powłoką Dash.
źródło
command (name)
ignoruje funkcje powłoki,command -v (name)
nie robi tego.command -v (name) >/dev/null
ma być przenośnym sposobem sprawdzania, czy komenda o takiej nazwie istnieje, niezależnie od tego, czy jest to wbudowana powłoka, funkcja czy narzędzie zewnętrzne.command make
do wywoływania faktycznego programu make. Niestety mam inne skrypty powłoki, które zepsuły się, gdy środowisko AOSP zaczęło dodawać gówno domake
wyników programu i było to irytujące jak diabli dowiedzieć się, skąd to dodatkowe wyjście pochodziło w tajemniczy sposób.Ma dwa różne zastosowania:
Jednym z zastosowań jest zignorowanie aliasów i funkcji oraz uruchomienie pliku wykonywalnego znalezionego w PATH, nawet jeśli istnieje alias lub funkcja o tej samej nazwie.
Jako przykład
ls
użyję aliasu, który dodaje/
nazwy katalogów do:W interaktywnej powłoce wygodniejsze może być użycie odwrotnego ukośnika przed nazwą polecenia jako alternatywnej, krótszej składni:
Innym zastosowaniem jest znalezienie polecenia, które zostanie uruchomione, gdy nazwa polecenia nie zostanie użyta przy użyciu opcji
-v
. Wydaje się być najbardziej przenośnym wariantem POSIXwhich
.źródło
command
jest przydatny, na przykład, jeśli chcesz sprawdzić, czy istnieje określone polecenie.which
uwzględnia w wyszukiwaniu aliasy, więc nie nadaje się do tego celu, ponieważ nie chcesz, aby losowy alias był uważany za dane polecenie.Innymi słowy, możesz mieć małą funkcję w skrypcie powłoki, taką jak ta:
A następnie przetestuj dostępne polecenie (tutaj,
dialog
):źródło
Pozwala uruchomić polecenie powłoki, ignorując wszelkie funkcje powłoki.
http://ss64.com/bash/command.html
źródło