Warum gibt 'echo --help' mir keine Hilfeseite für Echo?

20

Ich habe 'man echo' in Bash ausprobiert und es wurde mir mitgeteilt, dass 'echo --help' beim Beenden die Hilfe anzeigt und dass 'echo --version' die Version ausgibt und beendet. Aber warum funktioniert es nicht? 'echo --help' druckt '--help' einfach im wahrsten Sinne des Wortes.

booksee
quelle
2
Beachten Sie, dass die Erstellung einer Hilfemeldung durch echo --helpeinen Fehler darstellt . Stellen Sie sich vor, was passiert, wenn Sie Folgendes tun: printf "The option you entered is: " ; echo "$opt"und die Shell-Variable enthält optzufällig den Text --help. Laut POSIX-Standard echodarf sich das nicht so verhalten, aber das GNU-Echo ist widerlich nicht konform.
R ..
1
@R .. Also echo -eund echo -nist das auch ein Bug, nach deiner Logik?
Tyilo
@ Tyilo: Siehe die Spezifikation in POSIX oder meine Berichterstattung über das Problem hier: etalabs.net/sh_tricks.html
R ..
@R .. Stellen Sie sich vor, was passiert, wenn Sie Folgendes tun: printf "Die von Ihnen eingegebene Option lautet:"; echo "$ opt" und die Shell-Variable opt enthält zufällig den Text -e oder -n.
Tyilo
@ Tyilo: Anstatt es noch einmal zu erklären, habe ich es auf einer Seite gemocht, auf der ich bereits die Antwort auf diese Frage erklärt habe.
R ..

Antworten:

26

man echobezieht sich auf das echoProgramm . GNU echo unterstützt eine --helpOption, ebenso wie einige andere. Wenn Sie echoin Bash laufen, erhalten Sie stattdessen dessen eingebauten,echo was nicht der Fall ist.

Um auf das echoProgramm anstatt auf das eingebaute Programm zuzugreifen, können Sie entweder einen Pfad angeben:

/bin/echo --help

Oder verwenden Sie den enableBefehl von Bash , um die eingebaute Version zu deaktivieren:

$ enable -n echo
$ echo --help

Bash verfügt über integrierte Versionen vieler grundlegender Befehle, da dies etwas schneller geht. Sie können sie jedoch jederzeit auf diese Weise umgehen, wenn Sie dies benötigen.

Michael Homer
quelle
Dient mir recht für die Verwendung zsh. enablefunktioniert aber.
Michael Homer
@MichaelHomer Also können einige eingebaute Versionen von ... originalen abweichen? Wenn es Unterschiede gibt, wie heißen dann alle Originalbefehle, einschließlich des von Ihnen erwähnten "Echoprogramms"? Oder welchen Begriff verwenden wir, um sie von eingebauten Versionen zu unterscheiden?
Booksee
1
@booksee: Ja, sie können unterschiedlich sein. echoInsbesondere GNU hat viele Erweiterungen über POSIX und Bashs echonur wenige. Es gibt nicht wirklich einen allgemeinen Namen, den ich mir für Befehle vorstellen kann, die von eingebauten Funktionen beschattet werden könnten. Es gibt nicht so viele , dass man einen braucht würde: echo, test, [, und pwdsind diejenigen , die Sie wahrscheinlich Begegnung sind.
Michael Homer
@ Gnouc: Ja, commandruft Buildins immer explizit auf. Ich weiß nicht, was ich gedacht habe, zshansonsten funktioniert es andersherum.
Michael Homer
2
„verwenden Bash aktivieren Befehl disable“ yup, Jungs, ist wie das
Braiam
10

Zusätzlich zu anderen Antworten können Sie verwenden

$ help echo

Siehe auch eine kurze Hilfe zum eingebauten echoBefehl.

Dmitry Alexandrov
quelle
8

Sie verwenden den echoeingebauten Befehl von bash, der die --helpOption nicht versteht . Verwenden:

/bin/echo --help

echoVerwenden Sie man bashund suchen Sie nach , um die Hilfe für die integrierte Funktion anzuzeigen echo.

Greg Hewgill
quelle
Das hat bei mir funktioniert
Hayden Thring