Передача двоичных данных в качестве аргументов в bash - PullRequest
21 голосов
/ 28 февраля 2012

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

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

script arg1

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

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

Ответы [ 5 ]

20 голосов
/ 29 февраля 2012

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

script $'\x02\xc5\xd8'

Тест:

printf $'\x02\xc5\xd8' | hexdump -C
00000000  02 c5 d8
19 голосов
/ 28 февраля 2012
script "`printf "\x02\xc5\xd8"`"
script "`echo -e "\x02\xc5\xd8"`"

тест:

# echo -n "`echo -e "\x02\xc5\xd8"`" | hexdump -C
00000000  02 c5 d8                                          |...|
5 голосов
/ 28 февраля 2012

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

Отредактировано для предоставления примера:

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

Внутри скрипта:

var=$(base64 -d -i <<<"$1")
0 голосов
/ 28 февраля 2012

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

script "`cat file`"
0 голосов
/ 28 февраля 2012

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

$ script "`printf "\x02\xc5\xd8"`"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...