por que 'echo --help' não me dá a página de ajuda do eco?

20

Tentei 'man echo' no Bash e ele me disse que 'echo --help' exibirá ajuda e sairá, e da mesma forma, que 'echo --version' produzirá a versão e a saída. Mas por que não funciona? 'echo --help' simplesmente imprime '--help' literalmente.

booksee
fonte
2
Observe que a produção de uma mensagem de ajuda de echo --helpé um bug . Imagine o que acontece se você fizer isso: printf "The option you entered is: " ; echo "$opt"e a variável shell optpassa a conter o texto --help. De acordo com o padrão POSIX, echonão é permitido que se comporte dessa maneira, mas o eco GNU é obnóxia e não está em conformidade.
R ..
1
@R .. Então, echo -ee echo -ntambém é um bug, pela sua lógica?
Tyilo 10/09
@ Tyilo: Veja a especificação no POSIX, ou minha cobertura da questão aqui: etalabs.net/sh_tricks.html
R ..
@R .. Imagine o que acontece se você fizer: printf "A opção que você digitou é:"; echo "$ opt" e a variável shell opt contém o texto -e ou -n.
Tyilo 11/09
@ Tyilo: Em vez de explicá-lo, gostei de uma página em que já expliquei a resposta a essa pergunta.
R ..

Respostas:

26

man echorefere-se ao echoprograma . O GNU echo suporta uma --helpopção, assim como outras. Ao rodar echono Bash, você obtém o builtinecho que não funciona.

Para acessar o echoprograma, e não o interno, você pode dar um caminho para ele:

/bin/echo --help

ou use o enablecomando do Bash para desativar a versão interna:

$ enable -n echo
$ echo --help

O Bash possui versões integradas de muitos comandos básicos, porque é um pouco mais rápido fazer isso, mas você sempre pode ignorá-los dessa maneira quando necessário.

Michael Homer
fonte
Serve-me direito de usar zsh. enablefunciona, no entanto.
Michael Homer
@MichaelHomer Então, algumas versões internas podem diferir das originais? Se houver diferenças, qual é o nome de todos os comandos originais, incluindo o 'programa de eco', como você mencionou? Ou que termo usamos para distingui-los das versões internas?
booksee
1
@ booksee: Sim, eles podem ser diferentes. O GNU, echoem particular, tem muitas extensões acima do POSIX, e o Bash é echoapenas algumas. Não há realmente um nome geral em que eu possa pensar em comandos que possam ser sombreados por componentes internos. Não são tantos que você precisa de um: echo, test, [, e pwdsão os que você é provável encontrar.
Michael Homer
@ Gnouc: Sim, commandexplicitamente chama builtins sempre. Não sei o que estava pensando, a não ser que zshfuncione de outra maneira.
Michael Homer
2
"usar comando enable do Bash para desativar" Sim, caras, é como que
Braiam
10

Além de outras respostas, você pode usar

$ help echo

consulte também uma breve ajuda para o echocomando interno.

Dmitry Alexandrov
fonte
8

Você está usando o echocomando interno do bash, que não entende a --helpopção. Usar:

/bin/echo --help

Para ver a ajuda do built-in echo, use man bashe pesquise echo.

Greg Hewgill
fonte
Isso funcionou para mim
Hayden Thring