command foo
uruchomi foo
polecenie, nawet jeśli jest foo
zdefiniowana funkcja powłoki. To zachowanie jest wymagane przez POSIX .
Pozwala na wywołanie foo
polecenie wewnątrz foo
funkcjonować. Bez command foo
funkcja (po wywołaniu) wywołałaby siebie i utworzyła odwołanie cykliczne.
Czasami możesz zadzwonić foo
wykonywalny przez pełną ścieżkę, aby powstrzymać wyszukiwanie funkcji powłoki (wciąż niewygodne i nie przenośne jakiś rodzaj obejścia), ale w niektórych przypadkach nie możesz. Na przykład. w ta moja odpowiedź (pod koniec) redefiniuję cd
i command cd
jest koniecznością, ponieważ nawet jeśli jest cd
plik wykonywalny która pełna ścieżka mogłabym użyć, nie zmieniłaby katalogu. Za pomocą command
jest właściwy sposób poradzić sobie z tym.
Zauważ też command foo
nie uruchomi się foo
alias (jeśli istnieje). Wykorzystałeś ls
jako przykład. Przynajmniej kilka popularnych aliasów dystrybucji Linuksa ls
do ls --color=auto
domyślnie. W tym przypadku ls
i command ls
może dawać różne wyniki (tj. kolorowe lub nie). POSIX (lub dowolna inna definicja) command
nie musi wspominać o aliasach, ponieważ bar foo
nie uruchamia foo
alias (jeśli istnieje) w pierwszej kolejności (z kilkoma możliwymi wyjątkami bar
, ale command
nie jest jednym z nich).
Czy używasz command foo
w interaktywnej sesji powłoki lub w skrypcie powłoki może mieć znaczenie foo
, ale nie do command
wbudowany sam.