Wbudowane polecenia są zawsze preferowane od poleceń zewnętrznych. Uzasadnieniem jest to, że wbudowane polecenie jest szybsze (aw kilku przypadkach, takich jak cd
lub , tylko wbudowane polecenie może mieć pożądany efekt).test -o BASH_OPTION
Czasami zewnętrzne polecenie może mieć funkcje, których nie ma wbudowana powłoka. W takim przypadku możesz wywołać zewnętrzne polecenie, podając wyraźną ścieżkę (tj. Zawierającą ukośnik) (pomija to wszelkie obawy dotyczące kolejności w $PATH
). Jeśli nie chcesz sztywno kodować ścieżki zewnętrznej, ale chcesz uniemożliwić korzystanie z wbudowanej funkcji, możesz użyć "$(type -P test)"
(uwaga kapitału P
) w bash, "$(whence -p test)"
w ksh i =test
w zsh. Innym sposobem wymuszenia użycia polecenia zewnętrznego jest użycie command
wbudowanego ( command -p test …
) lub przejście przez env
narzędzie ( env test …
).
W Zsh możesz wyłączyć wbudowane za pomocą disable test
. Jest to stałe (dla bieżącej powłoki lub podpowłoki), dopóki wbudowane narzędzie nie zostanie ponownie włączone za pomocą enable test
. W bash możesz zrobić to samo z, enable -n test
aby wyłączyć i enable test
włączyć ponownie.
Możesz użyć aliasu lub funkcji, aby wymusić wykonanie innego polecenia, na przykład alias test=/usr/bin/test
lub test () { /usr/bin/test "$@"; }
. Jeśli masz taki alias, możesz uniemożliwić jego użycie, cytując dowolną jego część, np. \test
Wykona normalną funkcję / wbudowane / wyszukiwanie zewnętrzne. Zauważ, że w zależności od powłoki i jej ustawień, definicje aliasów w funkcji mogą być rozszerzane, gdy funkcja jest czytana lub kiedy jest wykonywana. Jeśli zdefiniowałeś funkcję, możesz jej użyć, command test
aby zapobiec wyszukiwaniu funkcji oraz wyszukiwaniu aliasów (więc tutaj test
wbudowane będą wywoływane, chyba że wyłączone).
/usr/bin/test -f "$file"
...