2012-02-28 27 views
19

Necesito pasar datos binarios a un programa bash que acepta argumentos de línea de comandos. ¿Hay alguna forma de hacer esto?Pasar datos binarios como argumentos en bash

Es un programa que acepte un argumento:

script arg1 

Pero en lugar de la cadena arg1, me gustaría pasar algunos bytes que no son buenos caracteres ASCII - en particular, los bytes 0x02, 0xc5 y 0xd8.

¿Cómo puedo hacer esto?

Respuesta

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

prueba:

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

Creo que su prueba es equivalente al simple 'echo -ne" \ x02 \ xc5 \ xd8 "| hexdump -C' :-) – elimisteve

+2

No del todo ... aquí estoy tratando de simular la llamada real de 'script', reemplazándolo con' echo -n' –

0

¿Qué tal esto?

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

no desea que bash para procesar el argumento ... 'script "\ 'printf "\ x02 \ xc5 \ xd8" \'"' –

+0

@yi_H Buen punto . Corrección aplicada, lo que lleva directamente a su respuesta :) –

-1

guardar los datos binarios en un archivo, y luego hacer:

script "`cat file`" 
+0

@downvoter: ¿qué pasa con esta respuesta? –

+0

UUOC. ¿Qué hay de script $ ( jordanm

+0

No perdoné, pero veo mi comentario en otra respuesta –

5

Bash no es bueno en tratar con datos binarios. Recomendaría usar base64 para codificarlo, y luego decodificarlo dentro de la secuencia de comandos.

Editado para proporcionar un ejemplo:

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

Dentro de la secuencia de comandos:

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

De acuerdo. No he encontrado ninguna forma de hacer que bash trabaje con cero bytes (\ x00) en cadenas, y tiende a agregar/eliminar nuevas líneas finales (\ x0a) como mejor le parezca, ambas son bastante malas cuando se trata de binarios arbitrarios datos. –

17

utilizar el estilo $'' cita:

script $'\x02\xc5\xd8' 

prueba:

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