Apakah ada operator “triple triple than safe binary <<< dalam bash?

27

Ini adalah pertanyaan yang agak hipotetis, jadi tolong jangan tanya saya mengapa saya ingin melakukan ini.

Dengan asumsi bahwa saya memiliki variabel GIFyang berisi data biner, dan dengan asumsi bahwa saya tidak bisa menggunakan |operator pipa , berikut ini harus menjadi cara yang benar untuk menggunakan operator 'triple-less-than':

openssl enc -base64 <<< $GIF

Namun, menurut saya itu <<<bukan biner-aman dan karenanya data biner menjadi korup.

Apakah ada yang setara dengan biner-safe?

Mikhail
sumber
Harap dicatat bahwa variabel bash tidak dapat berisi karakter NUL. Jadi variabel Anda $GIF, sebagai permulaan, tidak memiliki biner penuh bahkan sebelum memulai. Namun, dengan pengecualian karakter NUL, itu menahan semua yang lain. (sebagai ref: vaab.blog.kal.fr/2014/05/03/... )
vaab

Jawaban:

31

The disini String redirection ( <<<) adalah bentuk sederhana dari sini dokumen pengalihan ( <<). Di sini pengalihan string bukan "biner safe"; Bash akan melakukan ekspansi pada string di sini. Selain itu, Bash akan menambahkan baris baru ke akhir dari string di sini (mengeluarkan perintah xxd -p <<< "foo"dan Anda akan mendapatkan 666f6f0abalasannya).

Anda hanya aman bertaruh, tidak termasuk pipa, adalah I / O redirection .

Pertanyaan serupa bukan yang aman biner di sini . Anda dapat menyimpan data yang disandikan dan mencoba ini

COMMAND_WITH_BIN_INPUT <(uudecode <(echo "$uuEncodedData")) 

Namun ini tidak jauh dari

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

tetapi tanpa pipa metachar.

Dan Cruz
sumber
1
Atau, coba od -a <<< ""dan Anda akan melihat nlalih-alih nilai hex.
jcalfee314
@Wesley Ada juga archive.org. :) Tautan asli: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/…
Jason C
4

Bash umumnya tidak aman biner, dan akan merusak null dan baris baru dalam variabel yang mengandung konten biner selama substitusi.

Jadi saya pikir jawabannya adalah "tidak" tetapi lebih mendasar "tidak dalam bahasa skrip shell" karena mereka semua tampaknya memiliki masalah dengan biner.

Namun saya katakan Anda berencana untuk mendapatkan data menjadi $ GIF, Anda sebaliknya memasukkannya ke dalam file, atau menggunakan python sebagai bahasa scripting alternatif yang akan menangani data biner tanpa masalah.

Paul
sumber
1
Referensi atau ketepatan, atau contoh sederhana akan lebih bermanfaat daripada tebakan liar dan perasaan umum dari pihak Anda. Ada beberapa cara untuk mendapatkan data biner yang diuraikan melalui bash.
vaab