Apa yang dilakukan perintah builtin di bash?

35

Saya tahu apa itu perintah builtin, tapi apa fungsinya builtinsendiri? Eksekusi which lsmenunjukkan kepada saya /bin/ls, tetapi mengeksekusi which builtintidak menghasilkan apa-apa.

man builtinhanya memberi saya daftar perintah builtin, salah satunya adalah builtin. Halaman manual lainnya menjelaskan apa itu builtin, tetapi bukan apa builtinitu.

builtin --helpmemberitahu saya builtin: usage: builtin [shell-builtin [arg ...]]tetapi masih tidak apa fungsinya.

Apakah ini bagian dari bash dengan cara yang tidak dimiliki perintah builtin lain?

lfalin
sumber
3
Anda lupa help builtin.
Ignacio Vazquez-Abrams
3
which builtintidak mengembalikan hasil, karena whichmelaporkan lokasi perintah eksternal . Jika Anda bertanya pada shell type builtin, itu akan memberi tahu Anda, tidak mengejutkan, itu builtin is a shell builtin. Anda akan menemukan hal yang sama dengan alias, set, dll
Toby Speight
1
builtin help builtin
theonlygusti

Jawaban:

50

The builtinmerek perintah yakin Anda menjalankan shell built-in versi perintah daripada menjalankan perintah lain dengan nama yang sama.

Sebagai contoh, katakanlah Anda mendefinisikan fungsi shell bernama cduntuk mencetak beberapa status tambahan setiap kali Anda mengubah direktori. Tetapi Anda mengacaukannya dan sekarang Anda tidak dapat mengubah direktori dengan benar. Jadi sekarang Anda dapat mengetik builtin cd ~agar berhasil cd kembali ke direktori home Anda tanpa menjalankan fungsi shell Anda yang rusak.

Dan omong-omong, salinan halaman bash man saya memiliki bagian yang disebut "SHELL BUILTIN PERINTAH", dan itu mendefinisikan arti builtinperintah di bagian itu (ditranskripkan di bawah).

builtin shell-builtin [argumen]

    Jalankan builtin shell yang ditentukan, berikan argumen, dan
    mengembalikan status keluarnya. Ini berguna saat mendefinisikan suatu fungsi
    yang namanya sama dengan shell builtin, mempertahankan
    fungsionalitas builtin dalam fungsi. CD bawaannya adalah
    umumnya didefinisikan ulang dengan cara ini.

    Status pengembalian salah jika shell-builtin bukan shell builtin
    perintah.
Spiff
sumber
14
jawaban bagus. Tetapi membuat saya bertanya-tanya, bagaimana Anda bisa yakin bahwa builtinperintah itu adalah builtin asli dari bash?
Pacopaco
14
@Pacopaco: Anda tidak bisa :-). Anda dapat menimpa builtin, juga: function builtin { echo "Hi from builtin :-)"; }. Maka builtintidak lagi berfungsi.
sleske
12
@Pacopaco, type builtinakan memberi tahu Anda apakah itu asli builtin. Kecuali typetelah diganti dengan non-builtin type...
Toby Speight
10
oh ... sayangnya kita bisa: alias tidak diset = "gema tidak disetel ditimpa"; alias alias = "echo alias diganti" ... Jadi tidak beruntung di sini.
Olivier Dulac
8
Saya suka diskusi yang sedang berlangsung ini!
Sam Weaver