do czego służy polecenie bash `command` i co to jest, gdy pojawia się w skrypcie powłoki

1

kiedy pisałem skrypt powłoki, zdarza mi się wiedzieć command to słowo zastrzeżone. Wtedy zauważyłem command jest także poleceniem bash.

  • command ls daje taki sam wynik jak ls.
  • command ls | grep xxx daje taki sam wynik jak bez niego.

Następnie zastanawiam się, do czego służy, gdy jest to polecenie bash. I do czego służy, gdy jest w skrypcie powłoki. Dzięki!

Tiina
źródło

Odpowiedzi:

2

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.

Kamil Maciorowski
źródło