Pertanyaan Apa yang dilakukan 'set -x' di Dockerfile?


Saya belajar dari yang ada Dockerfileuntuk mulai membuat milikku sendiri Dockerfile. Saya perhatikan bahwa sebagian besar waktu, perintah dimulai dengan baik

RUN set -x ...

atau

RUN set -ex; ...

Mengapa ini dilakukan dan mengapa ini perlu? Apakah itu perlu?


5
2017-11-06 18:22


asal


Jawaban:


Itu -e menyebabkan perintah berhenti pada kesalahan apa pun. Sintaks yang lebih tipikal adalah memisahkan perintah dengan && untuk berhenti pada kesalahan apa pun.

Itu -x menyebabkan shell untuk menampilkan setiap perintah yang sedang dijalankan. Ini berguna untuk debug skrip.

Dari halaman manual bash di bawah set:

-e Segera keluar jika saluran pipa (yang mungkin terdiri dari a   satu perintah sederhana), daftar, atau a             komando gabungan (lihat SHELL GRAMMAR di atas), keluar dengan status bukan nol. Shellnya tidak             tidak keluar jika perintah yang gagal adalah bagian dari daftar perintah segera setelah beberapa saat             atau sampai kata kunci, bagian dari tes yang mengikuti kata-kata jika atau kata-kata yang dilindungi, bagian dari             mand dieksekusi dalam && atau || daftar kecuali perintah mengikuti perintah akhir && atau ||, apa pun             dalam suatu pipa tetapi yang terakhir, atau jika nilai kembalian perintah dibalik dengan!. Jika sebuah             perintah majemuk selain subkulit mengembalikan status bukan nol karena perintah gagal             sementara -e diabaikan, shell tidak keluar. Jebakan pada ERR, jika disetel, dijalankan             sebelum shell keluar. Opsi ini berlaku untuk lingkungan shell dan setiap subkulit envi‐             ronment secara terpisah (lihat COMMAND EXECUTION ENVIRONMENT di atas), dan dapat menyebabkan subkelop keluar             sebelum mengeksekusi semua perintah dalam subkulit.

Jika perintah majemuk atau fungsi shell mengeksekusi dalam konteks di mana -e diabaikan, tidak ada   dari perintah yang dieksekusi di dalam perintah majemuk atau badan fungsi akan dipengaruhi oleh   pengaturan -e, bahkan jika -e diatur dan sebuah perintah mengembalikan status kegagalan. Jika perintah majemuk   atau set fungsi shell -e saat mengeksekusi dalam konteks di mana -e diabaikan, pengaturan itu akan   tidak memiliki efek apa pun sampai perintah majemuk atau perintah yang berisi panggilan fungsi   selesai.

...

-x Setelah memperluas setiap perintah sederhana, untuk command, case   perintah, pilih perintah, atau aritmatika             untuk perintah, menampilkan nilai PS4 yang diperluas, diikuti oleh perintah dan diperluasnya             argumen atau daftar kata terkait.


7
2017-11-06 18:35