mengapa 'echo --help' tidak memberi saya halaman bantuan echo?

20

Saya mencoba 'man echo' di Bash dan ia memberi tahu saya bahwa 'echo --help' akan menampilkan bantuan lalu keluar, dan demikian pula, 'echo --versi' akan menampilkan versi dan keluar. Tetapi mengapa itu tidak berhasil? 'echo --help' cukup mencetak '--help' secara harfiah.

booksee
sumber
2
Perhatikan bahwa produksi pesan bantuan oleh echo --helpadalah bug . Bayangkan apa yang terjadi jika Anda melakukannya: printf "The option you entered is: " ; echo "$opt"dan variabel shell optberisi teks --help. Sesuai standar POSIX, echotidak diizinkan berperilaku seperti ini, tetapi gema GNU sangat tidak sesuai.
R ..
1
@R .. Jadi echo -edan echo -njuga bug, oleh logika Anda?
Tyilo
@ Tyilo: Lihat spesifikasi di POSIX, atau liputan saya tentang masalah ini di sini: etalabs.net/sh_tricks.html
R ..
@R .. Bayangkan apa yang terjadi jika Anda melakukannya: printf "Opsi yang Anda masukkan adalah:"; gema "$ opt" dan variabel shell opt berisi teks -e atau -n.
Tyilo
@ Tyilo: Daripada menjelaskannya kembali, saya suka ke halaman di mana saya sudah menjelaskan jawaban untuk pertanyaan itu.
R ..

Jawaban:

26

man echoberkaitan dengan echoprogram . GNU echo mendukung suatu --helppilihan, seperti yang dilakukan beberapa orang lain. Ketika Anda menjalankan echodi Bash Anda malah mendapatkan builtinecho yang tidak.

Untuk mengakses echoprogram, alih-alih builtin, Anda bisa memberikan path ke sana:

/bin/echo --help

atau gunakan enableperintah Bash untuk menonaktifkan versi bawaan:

$ enable -n echo
$ echo --help

Bash memiliki versi bawaan dari banyak perintah dasar, karena ini sedikit lebih cepat untuk melakukan itu, tetapi Anda selalu dapat mem-bypassnya seperti ini saat dibutuhkan.

Michael Homer
sumber
Melayani saya tepat untuk digunakan zsh. enabletidak bekerja.
Michael Homer
@MichaelHomer Jadi beberapa versi bawaan mungkin berbeda dari ... yang asli? Jika ada perbedaan, lalu apa nama untuk semua perintah asli, termasuk 'program gema' seperti yang Anda sebutkan? Atau istilah apa yang kita gunakan untuk membedakannya dari versi bawaan?
booksee
1
@ booksee: Ya, mereka bisa berbeda. GNU echokhususnya memiliki banyak ekstensi di atas POSIX, dan Bash echohanya beberapa. Sebenarnya tidak ada nama umum yang dapat saya pikirkan untuk perintah yang dapat dibayangi oleh builtin. Ada tidak begitu banyak bahwa Anda akan perlu satu: echo, test, [, dan pwdadalah orang-orang yang mungkin Anda bertemu.
Michael Homer
@ Gnouc: Ya, commandsecara eksplisit selalu memanggil builtin. Saya tidak tahu apa yang saya pikirkan, selain itu zshbekerja sebaliknya.
Michael Homer
2
"gunakan perintah aktifkan Bash untuk menonaktifkan" ya, teman-teman, seperti itu
Braiam
10

Selain jawaban lain, Anda bisa menggunakan

$ help echo

lihat juga bantuan singkat untuk echoperintah bawaan.

Dmitry Alexandrov
sumber
8

Anda menggunakan echoperintah bash bawaan, yang tidak mengerti --helpopsi. Menggunakan:

/bin/echo --help

Untuk melihat bantuan untuk built-in echo, gunakan man bashdan cari echo.

Greg Hewgill
sumber
ini berhasil untuk saya
Hayden Thring