The yash
shell telah sebuah printf
built-in, menurut nya pengguna .
Namun, ini yang saya lihat di yash
shell dengan konfigurasi default:
kk@eeyore ~ $ command -v printf
/usr/bin/printf
kk@eeyore ~ $ type printf
printf: a regular built-in at /usr/bin/printf
Apakah printf
built-in di shell ini atau tidak? Hasilnya serupa untuk sejumlah utilitas bawaan lain yang juga tersedia sebagai perintah eksternal.
Sebagai perbandingan, pada pdksh
( ksh
pada OpenBSD, di mana printf
adalah tidak built-in):
$ command -v printf
/usr/bin/printf
$ type printf
printf is /usr/bin/printf
Dan di bash
(mana printf
adalah built-in):
$ command -v printf
printf
$ type printf
printf is a shell builtin
posix
printf
shell-builtin
yash
Kusalananda
sumber
sumber
PATH
agar agar built-in reguler untuk dieksekusi - maka silakan ajukan pertanyaan Anda tentang itu.Jawaban:
The
yash
shell tidak memiliki, dan tidak digunakan, built-in versiprintf
(dan utilitas lainnya). Kebetulan POSIX sangat pedantically patuh dalam cara merumuskan hasilcommand -v
dantype
perintah.Seperti komentar mosvy , standar POSIX mensyaratkan bahwa perintah built-in reguler tersedia sebagai perintah eksternal
$PATH
untuk menjalankan versi perintah built-in.Ini adalah teks yang relevan dari standar :
Ini berarti bahwa output
command -v printf
menandakan bahwaprintf
perintah itu ditemukan di jalur pencarian, sedangkan outputtype printf
menambahkan ini bahwa perintah adalah built-in biasa.Karena
printf
perintah itu ditemukan di jalur pencarian, dan karena itu adalah built-in reguler di shell,yash
akan memanggil versi built-in dari perintah . Jikaprintf
itu tidak ditemukan di jalan, dan jikayash
shell berjalan di POSIX-ly modus yang benar, kesalahan akan telah dihasilkan sebagai gantinya.yash
bangga menjadi shell yang sangat sesuai dengan POSIX, dan ini juga berlaku jika kita melihat apa yang dikatakan POSIX tentangcommand -v
:sumber
Shell Watanabe memiliki tiga macam built-in, yang dijelaskan secara rinci dalam manualnya. Semua perintah bawaan juga terdaftar di sana, tetapi kita harus menyimpulkan bahwa sesuatu adalah perintah bawaan "biasa" dari tidak adanya catatan yang mengatakan bahwa perintah itu adalah "khusus" atau "semi-khusus" built-in. Built-in reguler tidak ditandai.
printf
adalah salah satu built-in "biasa" tersebut. Dalam mode asli selalu dipanggil, terlepas dari apakah ada perintah eksternal yang ditemukan oleh nama itu.Tetapi ketika
posixly-correct
opsi shell diatur itu hanya built-in jika perintah eksternal dapat ditemukan diPATH
.Ini sebenarnya sesuai dengan apa yang dikatakan Single Unix Specification, dan telah mengatakan setidaknya sejak tahun 1997.
Ini berbeda dari shell Z, shell 93 Korn, shell Bourne Again, dan shell Debian Almquist, tidak ada yang menerapkan atau mendokumentasikan perilaku tersebut untuk built-in reguler. Shell Z, misalnya, dokumen yang selalu ada bawaan selalu ditemukan, sebelum langkah yang mencari
PATH
. Begitu juga shell Debian Almquist. Dan itulah yang dilakukan oleh semua shell ini, bahkan jika dipanggil sepertish
opsi turn-on-POSIX mereka.Namun, tidak berjalan
printf
saat tidak aktifPATH
adalah perilaku shell PD Korn, shell Heirloom Bourne, dan shell MirBSD Korn; karena mereka tidak memilikiprintf
built-in di tempat pertama. ☺sumber
Kata-katanya dapat ditingkatkan.
Jika shell dalam mode posix
set --posixly-correct
::Untuk built-in reguler yang tidak ada di PATH ini dicetak:
Yang merupakan deskripsi yang jelas: Ini adalah builtin tetapi tidak ada yang dapat dieksekusi dengan nama yang sama di PATH.
Namun, untuk built-in reguler yang namanya juga ada di PATH, ini dicetak:
Yang, sepertinya menyiratkan bahwa executable di / bin / echo akan dieksekusi (yang tidak akan). Saya menyarankan perubahan dari
at
menjadialso found in PATH at
:akan membuat deskripsi yang lebih baik. Mungkin menyertakan itu dalam tanda kurung (seperti jawaban yang lain lakukan) bisa membuatnya lebih baik.
Dalam mode POSIX, tidak ada builtin biasa yang akan berfungsi kecuali itu juga ditemukan di PATH.
Namun, keduanya (POSIX) spesial:
Dan semi-khusus yash (tidak khusus untuk POSIX):
builtin masih berfungsi.
sumber