Подтвердить что ты не робот

Передача двоичных данных в качестве аргументов в bash

Мне нужно передать двоичные данные в программу bash, которая принимает аргументы командной строки. Есть ли способ сделать это?

Это программа, которая принимает один аргумент:

script arg1

Но вместо строки arg1 я бы хотел передать несколько байтов, которые не являются хорошими символами ASCII, в частности, байты 0x02, 0xc5 и 0xd8.

Как это сделать?

4b9b3361

Ответ 1

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

Тест:

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

Ответ 2

Используйте стиль цитаты $'':

script $'\x02\xc5\xd8'

Тест:

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

Ответ 3

Bash не подходит для обработки двоичных данных. Я бы рекомендовал использовать base64 для его кодирования, а затем декодировать его внутри script.

Отредактировано, чтобы предоставить пример:

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

Внутри script:

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

Ответ 4

Как насчет этого?

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

Ответ 5

Сохраните свои двоичные данные в файле, а затем выполните:

script "`cat file`"