GNU/Linux >> Belajar Linux >  >> Linux

Cara Menyematkan Biner yang Dapat Dieksekusi Dalam Skrip Shell Tanpa Alat Ekstra?

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.


Linux
  1. Linux – Bagaimana Menguji Apakah Biner Linux Dikompilasi Sebagai Kode Independen Posisi?

  2. Cara Membuat Script Shell Selalu Jalankan Sebagai Root?

  3. Arti dari $? Dalam Skrip Shell?

  1. Tentukan Shell In Script Selama Runtime?

  2. Mengonversi data biner menjadi heksadesimal dalam skrip Shell

  3. Skrip shell berfungsi dengan baik tanpa garis shebang? Mengapa?

  1. Waktu Habis Dalam Skrip Shell?

  2. Menentukan Jalur Ke Skrip Shell Bersumber?

  3. Proses Dalam Sesi Dalam Shell Interaktif Vs Dalam Skrip?