0

我下载了一个 shell 脚本,用于将 OpenVPN 文件和证书转换为 .apc 文件,以便与 Sophos UTM 9 一起使用。可以在此处找到该脚本,并且看起来运行良好。

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

当我将脚本的输出与从 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}
}
4

1 回答 1

0

\x04您不应该在生成的文件中看到任何字符。该脚本仅对控制字符使用十六进制表示。

如果你printf "\x04\x06test"在你的 shell 上执行,你应该看到“test”,如果你把它输入到一个 hexdumper,xxd你应该得到以下

# 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 等文本编辑器中查看输出文件时,您是否看到了十六进制表示形式的控制字符?
  • 您在哪种操作系统上执行此操作?
  • 有趣的问题:.- .-. . / -.-- --- ..- / .-. . .-.. .- - . -.. / - --- / ... .- -- ..- . .-.. / -- --- .-. ... . / ... - --- .--.
于 2013-02-14T09:07:48.127 回答