Shell脚本不编码ASCII

时间:2013-02-14 08:04:10

标签: shell character-encoding ascii

我下载了一个shell脚本,用于将OpenVPN文件和证书转换为.apc文件,以便与Sophos UTM 9一起使用。脚本可以找到here并且看起来效果很好。

问题是输出似乎没有编码(我相信这是正确的术语)。

当我将脚本的输出与从Notepad ++中的UTM下载的.apc文件进行比较时,脚本输出以

开头
\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}
}

1 个答案:

答案 0 :(得分:0)

您不应在结果文件中直接看到任何字符\x04。 该脚本只对控制字符使用十六进制表示。

如果你在shell上执行printf "\x04\x06test",你应该看到“test”,如果你将它传递给像xxd这样的hexdumper你应该得到以下

# printf "\x04\x06test" | xxd
0000000: 0406 7465 7374                           ..test

标题序列

printf "\x04\x06\x041234\x04\x04\x04\x08\x03\x0c\x00\x00\x00\x0a"

转换为(控制包含在[]括号中的字符以便澄清)

[EOT] [ACK] [EOT] 1234 [EOT] [EOT] [EOT] [BS] [ETX] [FF] [NUL] [NUL] [LF]

有趣的是:你说工作文件以EOT BEL EOT (\x04 \x07 \x08)开头,脚本生成的输出文件以EOT ACK EOT开头(这很有意义)

反的问题:

  • 在vi这样的文本编辑器中查看输出文件时,你会看到十六进制表示中的控制字符吗?
  • 您正在执行哪种操作系统?
  • 有趣的问题:.- .-. . / -.-- --- ..- / .-. . .-.. .- - . -.. / - --- / ... .- -- ..- . .-.. / -- --- .-. ... . / ... - --- .--.