web-dev-qa-db-fra.com

Passer des données binaires comme arguments dans bash

Je dois passer des données binaires à un programme bash qui accepte les arguments de ligne de commande. Y a-t-il un moyen de faire cela?

C'est un programme qui accepte un argument:

script arg1

Mais au lieu de la chaîne arg1, j'aimerais passer des octets qui ne sont pas de bons caractères ASCII, en particulier les octets 0x02, 0xc5 et 0xd8.

Comment puis-je faire cela?

20
Cam
script "`printf "\x02\xc5\xd8"`"
script "`echo -e "\x02\xc5\xd8"`"

tester:

# echo -n "`echo -e "\x02\xc5\xd8"`" | hexdump -C
00000000  02 c5 d8                                          |...|
17
Karoly Horvath

Utilisez le style de citation $'':

script $'\x02\xc5\xd8'

Tester:

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

Bash n'est pas bon pour traiter des données binaires. Je recommanderais d'utiliser base64 pour l'encoder, puis le décoder à l'intérieur du script.

Édité pour donner un exemple:

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

À l'intérieur du script:

var=$(base64 -d -i <<<"$1")
5
jordanm

Que dis-tu de ça?

$ script "`printf "\x02\xc5\xd8"`"
0
Bartosz Moczulski