dlaczego „echo --help” nie wyświetla strony pomocy echa?

20

Próbowałem „man echo” w Bash i powiedział mi, że „echo --help” wyświetli pomoc, a następnie zakończy działanie, i podobnie, że „echo - wersja” wyświetli wersję i zakończy działanie. Ale dlaczego to nie działa? „echo --help” po prostu drukuje „--help” dosłownie.

booksee
źródło
2
Pamiętaj, że wyświetlenie komunikatu pomocy przez echo --helpjest błędem . Wyobraź sobie, co się stanie, jeśli to zrobisz: printf "The option you entered is: " ; echo "$opt"a zmienna powłoki optzawiera tekst --help. Zgodnie ze standardem POSIX echonie wolno zachowywać się w ten sposób, ale echo GNU jest nieprzyzwoicie niezgodne.
R ..
1
@R .. A więc echo -ei echo -nlogika jest też błędem?
Tyilo,
@Tyilo: Zobacz specyfikację w POSIX lub mój opis problemu tutaj: etalabs.net/sh_tricks.html
R ..
@R .. Wyobraź sobie, co się stanie, jeśli to zrobisz: printf „Wprowadzona opcja to:”; echo „$ opt”, a opcja zmiennej powłoki zawiera tekst -e lub -n.
Tyilo
@Tyilo: Zamiast wyjaśniać to, polubiłem stronę, na której już wyjaśniłem odpowiedź na to pytanie.
R ..

Odpowiedzi:

26

man echodotyczy echoprogramu . GNU echo obsługuje do --helpopcji, podobnie jak kilka innych. Kiedy uruchamiasz się echow Bash, zamiast tego dostajesz wbudowane narzędzie,echo które nie działa.

Aby uzyskać dostęp do echoprogramu, zamiast wbudowanego, możesz podać ścieżkę do niego:

/bin/echo --help

lub użyj enablepolecenia Bash, aby wyłączyć wbudowaną wersję:

$ enable -n echo
$ echo --help

Bash ma wbudowane wersje wielu podstawowych poleceń, ponieważ jest to trochę szybsze, ale zawsze możesz je ominąć, gdy zajdzie taka potrzeba.

Michael Homer
źródło
Służy mi do użycia zsh. enablejednak działa.
Michael Homer
@MichaelHomer Więc niektóre wbudowane wersje mogą różnić się od ... oryginalnych? Jeśli istnieją różnice, to jak nazywają się wszystkie oryginalne polecenia, w tym „program echa”, jak wspomniałeś? Lub jakiego terminu używamy do odróżnienia ich od wersji wbudowanych?
booksee
1
@booksee: Tak, mogą się różnić. echoW szczególności GNU ma wiele rozszerzeń powyżej POSIX, a Bash jest echotylko kilka. Nie ma tak naprawdę ogólnej nazwy dla poleceń, które mogłyby zostać ukryte przez wbudowane funkcje. Nie ma tak wiele, że należałoby jeden: echo, test, [, i pwdsą ci, jesteś prawdopodobnie do czynienia.
Michael Homer
@Gnouc: Tak, commandzawsze jawnie wywołuje wbudowane wywołania. Nie wiem, o czym myślałem, poza tym zsh, że działa to w drugą stronę.
Michael Homer
2
„Użyj komendy enable Bash, aby wyłączyć” tak, chłopaki, jest tak
Braiam
10

Oprócz innych odpowiedzi możesz użyć

$ help echo

zobacz także krótką pomoc dotyczącą wbudowanego echopolecenia.

Dmitrij Aleksandrow
źródło
8

Używasz echowbudowanego polecenia bash, które nie rozumie --helpopcji. Posługiwać się:

/bin/echo --help

Aby wyświetlić pomoc dotyczącą wbudowanego echo, użyj man bashi wyszukaj echo.

Greg Hewgill
źródło
to zadziałało dla mnie
Hayden Thring