perché 'echo --help' non mi dà la pagina di aiuto di echo?


20

Ho provato "man echo" in Bash e mi ha detto che "echo --help" mostrerà aiuto, quindi uscirà, e allo stesso modo, "echo --version" produrrà la versione e uscirà. Ma perché non funziona? 'echo --help' stampa semplicemente '--help' letteralmente.


2
Si noti che la produzione di un messaggio di aiuto echo --helpè un bug . Immagina cosa succede se lo fai: printf "The option you entered is: " ; echo "$opt"e la variabile shell optsembra contenere il testo --help. Secondo lo standard POSIX, echonon è consentito comportarsi in questo modo, ma l'eco GNU è odiosamente non conforme.
R ..

1
@R .. Quindi, echo -eed echo -nè anche un bug, secondo la tua logica?
Tyilo,

@Tyilo: vedi le specifiche in POSIX, o la mia copertura del problema qui: etalabs.net/sh_tricks.html
R ..

@R .. Immagina cosa succede se lo fai: printf "L'opzione che hai inserito è:"; echo "$ opt" e la variabile shell opt sembra contenere il testo -e o -n.
Tyilo,

@Tyilo: piuttosto che spiegarlo mi è piaciuta una pagina in cui ho già spiegato la risposta a quella domanda.
R ..

Risposte:


26

man echosi riferisce al echoprogramma . GNU echo supporta--help un'opzione, come fanno alcuni altri. Quando corri echoin Bash invece ottieni il suo builtinecho che non lo fa.

Per accedere al echoprogramma, piuttosto che al builtin, puoi dare un percorso ad esso:

/bin/echo --help

o usa il enablecomando di Bash per disabilitare la versione integrata:

$ enable -n echo
$ echo --help

Bash ha versioni integrate di molti comandi di base, perché è un po 'più veloce per farlo, ma puoi sempre bypassarli in questo modo quando è necessario.


Mi serve bene per l'uso zsh. enablefunziona, però.
Michael Homer,

@MichaelHomer Quindi alcune versioni integrate potrebbero differire da ... quelle originali? Se ci sono differenze, come si chiamano tutti i comandi originali, incluso "programma eco" come hai detto? O quale termine utilizziamo per distinguerli dalle versioni integrate?
bookee

1
@booksee: Sì, possono differire. GNU echoin particolare ha molte estensioni sopra POSIX, e echosolo alcune di Bash . Non c'è davvero un nome generale che mi venga in mente per comandi che potrebbero essere ombreggiati dai builtin. Non ci sono così tanti che avresti bisogno di uno: echo, test, [, e pwdsono quelli che è molto probabile che incontro.
Michael Homer,

@Gnouc: Sì, commandesplicitamente chiama sempre i builtin. Non so cosa stavo pensando, a parte che zshfunziona diversamente.
Michael Homer,

2
"usa il comando di abilitazione di Bash per disabilitare" sì, ragazzi, è così
Braiam

10

Oltre ad altre risposte, puoi usare

$ help echo

vedere anche un breve aiuto per il echocomando integrato .


8

Stai usando il echocomando integrato di bash, che non comprende l' --helpopzione. Uso:

/bin/echo --help

Per visualizzare la guida per il built-in echo, utilizzare man bashe cercare echo.


questo ha funzionato per me
Hayden Thring il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.