Bash'daki <<< işlecinden ikili güvenlikli “üç kat daha az” var mı?


27

Bu oldukça varsayımsal bir sorudur, lütfen neden bunu yapmak istediğimi sorma.

GIFİkili veri içeren bir değişkene sahip olduğumu varsayalım ve boru |operatörünü kullanamayacağımı varsayalım, 'üçlüden az' operatörünü kullanmanın doğru yolu aşağıdaki olmalıdır :

openssl enc -base64 <<< $GIF

Ancak, bana ikili güvenli<<< olmadığını ve bu nedenle ikili verileri bozulur gibi görünüyor.

İkili güvenlik eşdeğeri var mı?


Bash değişkenlerinin NUL karakteri içeremediğini lütfen unutmayın. Yani değişkeniniz $GIF, bir başlangıç ​​için, başlamadan önce bile tam ikili tutmuyor. Ancak, NUL karakteri hariç, diğerlerini elinde tutuyor. (ref olarak: vaab.blog.kal.fr/2014/05/03/… )
vaab, 4

Yanıtlar:


31

Burada dize yönlendirme ( <<<) basit bir şeklidir burada belge yönlendirme ( <<). Burada dize yönlendirme "ikili güvenli" değildir; Bash burada stringte genişleme yapacak. Ek olarak, Bash burada dizgenin sonuna yeni bir satır ekleyecektir (komutu verin xxd -p <<< "foo"ve 666f6f0akarşılığını alırsınız ).

Borular hariç tek güvenli bahis, G / Ç yönlendirmesidir .

Benzer olmayan ikili güvenli soru burada . Kodlanmış verileri saklayabilir ve deneyebilirsiniz

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

ancak bu uzak değil

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

ama boru metakar olmadan.


1
Ya da deneyin od -a <<< ""ve nlonaltılık değer yerine göreceksiniz .
jcalfee314

@Wesley Ayrıca archive.org da var. :) Orijinal bağlantı: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/…
Jason C

4

Bash genel olarak ikili güvenli değildir ve ikame sırasında ikili içerik içeren değişkenlerde boş ve yeni satırları bozar.

Bu yüzden cevabın "hayır" ama daha temelde "kabuk komut dosyası dilinde değil" olduğunu düşünüyorum çünkü hepsinin ikili ile problemleri varmış gibi görünüyor.

Ancak, verileri $ GIF içine almayı planladığınızı söyleyebilirim, bunun yerine bir dosyaya dahil edin ya da python'u, ikili verileri sorunsuzca kullanacak alternatif bir betik dili olarak kullanın.


1
Referanslar veya kesinlik veya basit örnekler, vahşi bir tahminden ve sizin tarafınızdan genel hissetmekten daha yararlı olurdu. Bash aracılığıyla ikili verilerin ayrıştırılmasının yolları vardır.
vaab 4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.