2012-02-28 5 views
19

Potrzebuję przekazać dane binarne do programu bash, który akceptuje argumenty wiersza poleceń. Czy jest jakiś sposób na zrobienie tego?Przekazywanie danych binarnych jako argumentów w bash

Jest to program, który przyjmuje jeden argument:

script arg1 

Ale zamiast napisu arg1, chciałbym przekazać kilka bajtów, które nie są dobre znaki ASCII - w szczególności bajtów 0x02, 0xc5 i 0xd8.

Jak to zrobić?

Odpowiedz

16
script "`printf "\x02\xc5\xd8"`" 
script "`echo -e "\x02\xc5\xd8"`" 

Test:

# echo -n "`echo -e "\x02\xc5\xd8"`" | hexdump -C 
00000000 02 c5 d8           |...| 
+2

Wierzę, że twój test jest równoważny prostszemu "echo -ne" \ x02 \ xc5 \ xd8 "| hexdump -C' :-) – elimisteve

+2

Nie całkiem ... tutaj próbuję zasymulować rzeczywiste wywołanie 'script', zamieniając je na' echo -n' –

0

Co powiesz na to?

$ script "`printf "\x02\xc5\xd8"`" 
+3

nie chcesz bash do przetwarzania argument ... 'skrypt "\ 'printf "\ x02 \ xc5 \ xd8" \'"' –

+0

@yi_H Dobry punkt . Zastosowano poprawkę, która prowadzi bezpośrednio do Twojej odpowiedzi :) –

-1

Zapisywanie danych binarnych w pliku, a następnie wykonaj:

script "`cat file`" 
+0

@downvoter: co jest nie tak z tą odpowiedzią? –

+0

UUOC. Co powiesz na skrypt $ ( jordanm

+0

Nie przesłałem komentarza, ale widzę mój komentarz w innej odpowiedzi –

5

atakujących nie jest dobry w kontaktach z danych binarnych. Zalecam użycie base64 do kodowania, a następnie dekodowania wewnątrz skryptu.

Edited by podać przykład:

script "$(printf '\x02\xc5\xd8' | base64 -)" 

Wewnątrz skryptu:

var=$(base64 -d -i <<<"$1") 
+2

Uzgodnione. Nie znalazłem żadnego sposobu, aby uzyskać bash, aby poradzić sobie z zerowymi bajtami (\ x00) w łańcuchach i ma tendencję do dodawania/usuwania końcowych znaków nowej linii (\ x0a), ponieważ myśli najlepiej - oba są dość złe, gdy mają do czynienia z arbitralnym binarnym dane. –

17

użyć stylu $'' Cytat:

script $'\x02\xc5\xd8' 

Test:

printf $'\x02\xc5\xd8' | hexdump -C 
00000000 02 c5 d8