pourquoi 'echo --help' ne me donne pas la page d'aide d'écho?

20

J'ai essayé 'man echo' dans Bash et il m'a dit que 'echo --help' affichera de l'aide puis quittera, et de même, que 'echo --version' affichera la version et quittera. Mais pourquoi ça ne marche pas? 'echo --help' imprime simplement '--help' littéralement.

booksee
la source
2
Notez que la production d'un message d'aide par echo --helpest un bug . Imaginez ce qui se passe si vous le faites: printf "The option you entered is: " ; echo "$opt"et la variable shell optcontient le texte --help. Selon la norme POSIX, il echon'est pas autorisé de se comporter de cette manière, mais l'écho GNU est manifestement non conforme.
R ..
1
@R .. Donc echo -eet echo -nc'est aussi un bug, par ta logique?
Tyilo
@Tyilo: Voir les spécifications dans POSIX, ou ma couverture du problème ici: etalabs.net/sh_tricks.html
R ..
@R .. Imaginez ce qui se passe si vous le faites: printf "L'option que vous avez entrée est:"; echo "$ opt" et la variable shell opt se trouve contenir le texte -e ou -n.
Tyilo
@ Tyilo: Plutôt que de le ré-expliquer, j'ai aimé une page où j'ai déjà expliqué la réponse à cette question.
R ..

Réponses:

26

man echose rapporte au echoprogramme . GNU echo prend en charge une --helpoption, tout comme certaines autres. Lorsque vous exécutez echodans Bash, vous obtenez à la place sa fonction intégréeecho qui ne fonctionne pas.

Pour accéder au echoprogramme, plutôt qu'au programme intégré, vous pouvez soit lui donner un chemin:

/bin/echo --help

ou utilisez la enablecommande de Bash pour désactiver la version intégrée:

$ enable -n echo
$ echo --help

Bash a des versions intégrées de nombreuses commandes de base, car c'est un peu plus rapide pour le faire, mais vous pouvez toujours les contourner comme cela quand vous en avez besoin.

Michael Homer
la source
Me sert bien pour l'utilisation zsh. enablefonctionne, cependant.
Michael Homer
@MichaelHomer Donc, certaines versions intégrées peuvent différer de ... celles d'origine? S'il y a des différences, quel est le nom de toutes les commandes originales, y compris le «programme d'écho» comme vous l'avez mentionné? Ou quel terme utilisons-nous pour les distinguer des versions intégrées?
booksee
1
@booksee: Oui, ils peuvent différer. GNU echoen particulier a beaucoup d'extensions au-dessus de POSIX, et Bash n'est echoque quelques-unes. Il n'y a pas vraiment de nom général auquel je puisse penser pour les commandes qui pourraient être masquées par les commandes internes. Il n'y a pas tellement que vous auriez besoin d' un: echo, test, [et pwdsont celles que vous risquez fortement de rencontrer.
Michael Homer
@Gnouc: Oui, commandappelle toujours explicitement les buildins. Je ne sais pas ce que je pensais, sinon ça zshmarche dans l 'autre sens.
Michael Homer
2
"utilisez la commande enable de Bash pour désactiver" yup, les gars, c'est comme ça
Braiam
10

En plus d'autres réponses, vous pouvez utiliser

$ help echo

voir aussi une brève aide pour la echocommande intégrée .

Dmitry Alexandrov
la source
8

Vous utilisez la echocommande intégrée de bash, qui ne comprend pas l' --helpoption. Utilisation:

/bin/echo --help

Pour voir l'aide pour le intégré echo, utilisez man bashet recherchez echo.

Greg Hewgill
la source
cela a fonctionné pour moi
Hayden Thring