Có một bộ ba nhị phân nào an toàn hơn ba lần so với toán tử <<< trong bash không?


27

Đây là một câu hỏi khá giả thuyết, vì vậy xin đừng hỏi tôi tại sao tôi muốn làm điều này.

Giả sử rằng tôi có một biến GIFchứa dữ liệu nhị phân, và giả định rằng tôi không thể sử dụng các đường ống |khai thác, sau đây nên được cách chính xác để sử dụng toán tử 'triple-ít-hơn':

openssl enc -base64 <<< $GIF

Tuy nhiên, đối với tôi nó <<<không an toàn nhị phân và do đó dữ liệu nhị phân bị hỏng.

Có tương đương an toàn nhị phân?


Xin lưu ý rằng các biến bash không thể chứa ký tự NUL. Vì vậy, biến của bạn $GIF, để bắt đầu, không giữ toàn bộ nhị phân ngay cả trước khi bắt đầu. Tuy nhiên, ngoại trừ nhân vật NUL, nó đang nắm giữ tất cả những người khác. (như một ref: vaab.blog.kal.fr/2014/05/03/... )
vaab

Câu trả lời:


31

Các đây chuỗi chuyển hướng ( <<<) là một dạng đơn giản của ở đây tài liệu chuyển hướng ( <<). Ở đây chuyển hướng chuỗi không phải là "an toàn nhị phân"; Bash sẽ thực hiện mở rộng trên chuỗi ở đây. Ngoài ra, Bash sẽ nối một dòng mới vào cuối chuỗi ở đây (ban hành lệnh xxd -p <<< "foo"và bạn sẽ nhận 666f6f0alại).

Chỉ đặt cược an toàn của bạn, bao gồm đường ống, là I / O chuyển hướng .

Tương tự không phải câu hỏi an toàn nhị phân ở đây . Bạn có thể lưu trữ dữ liệu được mã hóa và thử điều này

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

tuy nhiên điều này không xa

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

nhưng không có ống metachar.


1
Hoặc, hãy thử od -a <<< ""và bạn sẽ thấy nlthay vì giá trị hex.
jcalfee314

@Wesley Cũng có archive.org. :) Liên kết gốc: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/ trộm
Jason C

4

Bash nói chung không an toàn nhị phân, và sẽ làm hỏng null và dòng mới trong các biến chứa nội dung nhị phân trong quá trình thay thế.

Vì vậy, tôi nghĩ rằng câu trả lời là "không" nhưng về cơ bản hơn "không phải bằng ngôn ngữ kịch bản lệnh shell" bởi vì tất cả chúng dường như có vấn đề với nhị phân.

Tuy nhiên, tôi muốn nói rằng bạn có kế hoạch đưa dữ liệu vào $ GIF, thay vào đó, bạn đưa dữ liệu vào một tệp hoặc sử dụng python làm ngôn ngữ kịch bản thay thế sẽ xử lý dữ liệu nhị phân mà không gặp sự cố.


1
Tài liệu tham khảo hoặc độ chính xác, hoặc ví dụ đơn giản sẽ hữu ích hơn so với dự đoán hoang dã và cảm giác chung từ phía bạn. Có nhiều cách để có được dữ liệu nhị phân được phân tích cú pháp thông qua bash.
vaab
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.