Shell脚本未编码ASCII
我下载了一个shell脚本,将OpenVPN文件和证书转换为.apc文件,以便与Sophos UTM 9一起使用。该脚本可以找到,并且似乎工作得很好 问题是输出似乎没有被编码(我相信这是正确的术语) 当我将脚本的输出与从Notepad++中的UTM下载的.apc文件进行比较时,脚本输出以Shell脚本未编码ASCII,shell,character-encoding,ascii,Shell,Character Encoding,Ascii,我下载了一个shell脚本,将OpenVPN文件和证书转换为.apc文件,以便与Sophos UTM 9一起使用。该脚本可以找到,并且似乎工作得很好 问题是输出似乎没有被编码(我相信这是正确的术语) 当我将脚本的输出与从Notepad++中的UTM下载的.apc文件进行比较时,脚本输出以 \x04\x06\x04 而正确编码的文件 EOT BEL EOT 当我尝试导入脚本的输出时,它失败了,我相信这是因为ASCII字符没有正确编码 是否还有其他方法可以对所有\x进行编码??为了合适的角色?或
\x04\x06\x04
而正确编码的文件
EOT BEL EOT
当我尝试导入脚本的输出时,它失败了,我相信这是因为ASCII字符没有正确编码
是否还有其他方法可以对所有\x进行编码??为了合适的角色?或者有没有办法让.sh输出已经编码的字符
作为参考,shell脚本具有以下功能
write_header() {
printf "\x04\x06\x041234\x04\x04\x04\x08\x03\x0c\x00\x00\x00\x0a" > ${ApcFile}
}
您不应该在生成的文件中看到任何像
\x04
这样的字符。
该脚本对控制字符只使用十六进制表示
如果您在shell上执行printf“\x04\x06test”
,您应该会看到“test”,如果您将它导入一个类似xxd
的hextdumper,您应该会得到以下结果
# printf "\x04\x06test" | xxd
0000000: 0406 7465 7374 ..test
标题序列
printf "\x04\x06\x041234\x04\x04\x04\x08\x03\x0c\x00\x00\x00\x0a"
翻译为(控制字符包装在[]括号中,以便于澄清)
有趣的是:您说工作文件以EOT BEL EOT(\x04\x07\x08)
开头,脚本生成的输出文件以EOT ACK EOT
开头(这很有意义)
反问题:
- 在像vi这样的文本编辑器中查看输出文件时,您会看到控制字符的十六进制表示形式吗
- 您在哪种操作系统上执行此操作
- 有趣的问题:
-..-..-..-/-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-代码>
printf“\x04\x06test”
我只看到了test,当我将它传输到xxd时,我看到了您所描述的内容。当我在vi中打开工作文件时,我会看到以蓝色突出显示的控制字符,而当我打开非工作文件(由shell脚本生成)时,我会看到文本\x04\x06\x04
。我不知道为什么shell脚本输出的是十六进制表示,而不是控制字符本身。我在Ubuntu服务器上运行shell脚本,但我在Windows中下载了文件,并将它们复制到服务器上的Samba共享中。-/--/---/----/------/------/------/-----代码>
[EOT] [ACK] [EOT] 1234 [EOT] [EOT] [EOT] [BS] [ETX] [FF] [NUL] [NUL] [LF]