在bash中将二进制数据作为参数传递
我需要将二进制数据传递给接受命令行参数的bash程序。有办法做到这一点吗 它是一个接受一个参数的程序:在bash中将二进制数据作为参数传递,bash,character-encoding,parameters,Bash,Character Encoding,Parameters,我需要将二进制数据传递给接受命令行参数的bash程序。有办法做到这一点吗 它是一个接受一个参数的程序: script arg1 但是我想传递一些不是好的ASCII字符的字节,而不是字符串arg1,特别是0x02、0xc5和0xd8 我该怎么做?这个怎么样 $ script "`printf "\x02\xc5\xd8"`" 将二进制数据保存到文件中,然后执行以下操作: script "`cat file`" Bash不擅长处理二进制数据。我建议使用base64对其进行编码,然后在脚本内部对
script arg1
但是我想传递一些不是好的ASCII字符的字节,而不是字符串arg1
,特别是0x02
、0xc5
和0xd8
我该怎么做?这个怎么样
$ script "`printf "\x02\xc5\xd8"`"
将二进制数据保存到文件中,然后执行以下操作:
script "`cat file`"
Bash不擅长处理二进制数据。我建议使用base64对其进行编码,然后在脚本内部对其进行解码 编辑以提供示例:
script "$(printf '\x02\xc5\xd8' | base64 -)"
脚本内部:
var=$(base64 -d -i <<<"$1")
var=$(base64-d-i
测试:
使用$''
报价样式:
script $'\x02\xc5\xd8'
测试:
您不希望bash处理该参数…脚本“`printf”\x02\xc5\xd8”`
@yi\u H这是一个很好的观点。已应用修复程序,这将直接导致您的答案:)UUOC。脚本$(你在脚本中做什么?你预期的结果是什么?@jordanm:不是$(这是一个特定于bash的扩展。这个问题只标记了bash,所以他可能会在脚本的顶部有#!/bin/bash。同意。我还没有找到任何方法让bash处理零字节(\x00)在字符串中,它倾向于添加/删除它认为最好的尾随换行符(\x0a)——在处理任意二进制数据时,这两者都非常糟糕。我相信您的测试相当于更简单的echo-ne“\x02\xc5\xd8”| hextdump-C
:-)不完全是……这里我试图模拟script
的实际调用,用echo-n
$”
是引用的Bash机制
# echo -n "`echo -e "\x02\xc5\xd8"`" | hexdump -C
00000000 02 c5 d8 |...|
script $'\x02\xc5\xd8'
printf $'\x02\xc5\xd8' | hexdump -C
00000000 02 c5 d8