Saya mencari cara agar biner yang dapat dieksekusi tertanam ke dalam skrip. Sesuatu seperti ini:
#!/bin/bash
...some shell code
execute binary:
>>>
binary
code
...
<<<
...some more shell code possibly
Saya telah menemukan solusi ini, yang menggunakan uuencode
dan baik. Tapi itu tergantung pada shrutils
, yang tampaknya merupakan tambahan, karena tidak disertakan secara default di Debian saya.
Saya telah berpikir untuk mengkodekan biner dengan base64
lalu mendekodekannya dan entah bagaimana mengeksekusi, mungkin tanpa membuat file temp. Saya ingat ada perpustakaan yang bertanggung jawab untuk menjalankan sesuatu, tetapi lupa apa itu.
Mungkin yang terbaik adalah memiliki konstruksi sesederhana eksekusi ini:
$ <(base64 out | base64 -d)
bash: /dev/fd/63: Permission denied
Jawaban yang Diterima:
Bagaimana dengan:
unpack() {
tail +9 "$0" > /tmp/xxx.$$
chmod +x /tmp/xxx.$$
}
unpack
/tmp/xxx.$$ <add args here>
rm /tmp/xxx.$$
exit
<add the binary here>
Jika Anda tidak ingin memiliki data biner dalam skrip, Anda dapat mengkodekannya dan mengganti cat
oleh dekoder terkait.
Perhatikan bahwa Anda perlu mengganti +9
dengan nomor baris tempat biner dimulai jika Anda mengubah skrip menjadi panjang yang berbeda.
Jika tail
implementasi tidak mendukung argumen +9
, coba -n +9
sebagai gantinya.
Jika Anda takut merusak file /tmp yang ada, coba gunakan mktemp(1)
untuk membuat nama file tmp.
Perhatikan bahwa metode ini digunakan oleh skrip pemutakhiran untuk SunPro
suite kompiler yang menyertakan arsip tar terkompresi dengan seluruh peningkatan dan beberapa kode shell untuk mengelola penanganannya.