Beberapa shebang dalam satu file bash

8

Saya memiliki skrip dari orang lain yang memiliki tampilan (catatan: ini adalah file tunggal):

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

Saya bertanya-tanya apa tujuan dari shebang kedua dan ketiga? Apakah itu karena kesalahan atau sengaja?

Barat Sahdzijeu
sumber
Apakah yang asing #!/bin/bashdidahului oleh <<konstruk (di sini dokumen) sebagai some command <<end_of_script_flag:?
dan
Tidak ada <<konstruksi. Hanya shebang biasa dan beberapa perintah hapus (ini adalah uninstall script)
Barat Sahdzijeu
Bisa jadi skrip tersebut dikumpulkan dari skrip yang dimaksudkan untuk dijalankan berturut-turut, atau bahwa file itu dimaksudkan untuk dipecah menjadi beberapa skrip independen tetapi pemisahan gagal. Apa yang ada sebelum #!garis tambahan ?
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles, saya yakin tidak ada tujuan tambahan tersembunyi dari skrip itu. Ini adalah skrip statis bernama Uninstall.command(platform: Mac OS X).
Barat Sahdzijeu

Jawaban:

9

Jika baris-baris ini bukan awal skrip shell yang disertakan untuk dibangun, yaitu di dalam skema bentuk:

cat <<end_of_shell_script >dynamically_built_shell
#!/bin/bash
[...]
end_of_shell_script

Kemudian konstruksi berulang yang Anda temukan adalah hasil dari banyak copy- pasteskrip shell penuh tetapi tanpa cukup perhatian dan pemahaman tentang apa yang digunakan dari komentar yang sangat istimewa ini pada baris 1 skrip, dimulai dengan #!.

Hati-hati sebelum menggunakan skrip shell seperti itu (tidak sudo, tidak su:)).

dan
sumber
BTW, banyak sudo di sana ... Ya ampun ...
Barat Sahdzijeu
/bin/rm(+ boneka untuk memberi makan robot)!
dan
3
... atau menggabungkan beberapa skrip bash mirip dengan bagaimana skrip dieksekusi jika Anda source-d menggunakan nama. Saya tidak melihat perlunya otak tidak berkomentar. Ini bisa diterima dengan cara ini dan itulah alasan mengapa shebang adalah baris komentar.
0xC0000022L
Setelah pandangan kedua saya perhatikan beberapa baris lain diulang, jadi saya cenderung berpikir itu hanya salin-tempel dari beberapa skrip.
Barat Sahdzijeu
4

Tidak ada tujuan, ini hanya komentar. Kecuali jika 'beberapa perintah' berisi beberapa perintah yang menyimpan ini ke dalam file terpisah untuk eksekusi selanjutnya.

gena2x
sumber
Tidak ada operasi penulisan dan eksekusi selanjutnya. Skrip ini hanyalah serangkaian rmoperasi yang menghapus instalasi beberapa aplikasi. Saya pikir itu mungkin terkait dengan forking shell baru, tetapi ternyata itu copy paste kotor oleh pembuat skrip.
Barat Sahdzijeu
@BaratSahdzijeu HATI-HATI DENGAN TULISAN ACAK DENGAN Rm DI SANA! Permintaan maaf untuk topi, tapi saya tidak bisa menekankan betapa pentingnya itu. Jika penulis asli membuat kesalahan yang tepat (atau lebih tepatnya, kesalahan yang salah), itu dapat merusak perangkat lunak lain pada mesin dan bahkan merusak OS.
Nzall
Nate, terima kasih! Sebenarnya saya tidak menjalankan skrip shell itu. Saya menggunakannya sebagai sumber pembelajaran untuk uninstaller pada platform Mac OS X (Linux seperti OS). Pikir mungkin itu memiliki beberapa rasa khusus dari bash yang memiliki beberapa arti adalah shebang diulang dalam naskah.
Barat Sahdzijeu
Penggunaan #!yang sama di tingkat kernel (lihat man execve) pada sistem Unix (OpenBSD, FreeBSD, MacOS X, Kali-linux ...). Mereka bashhanya melihat ini sebagai komentar.
dan
@NateKerkhofs Dan ada apa mv ln cp dd vi ...dengan 200 perintah lainnya? Mengapa Anda tidak menekankan mereka juga? Mereka mungkin merasa ditinggalkan.
ott--