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.


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.


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.


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.


to zadziałało dla mnie
— Hayden Thring
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.