作为命令行输入的不可打印字符

Far*_*olK 3 command-line standard input

我有一个程序需要一些不可打印的字符,如0x0F ( ctrl+ o) 作为输入来执行程序的预期部分。

0       000     00              NUL     �          Null char 
1       001     01              SOH               Start of Heading
2       002     02              STX               Start of Text
3       003     03              ETX               End of Text
4       004     04              EOT               End of 
Run Code Online (Sandbox Code Playgroud)

它正在命令行上执行,知道如何将不可打印的字符作为程序的输入插入命令行吗?

ilk*_*chu 6

printf实用程序支持八进制字符转义:

  1. 除了 XBD 文件格式表示法 ( '\\', '\a', '\b', '\f', '\n', '\r', '\t', '\v') 中显示的转义序列之外"\ddd"ddd是一位、两位或三位八进制数,应写入为具有指定数值的字节八进制数。

printf至少 Bash 和 Zsh 中的内置函数也支持十六进制转义序列\xHH$'...'引号,它们类似地插入转义序列。

因此,要在某些命令的命令行参数中使用此类字符,请执行以下操作:

$ somecmd "arg_with_$(printf '\017')_xoff"
Run Code Online (Sandbox Code Playgroud)

或者如果您需要多次使用该字符,则将其放入变量中

$ xoff=$(printf '\017')
$ somecmd "many${xoff}odd${xoff}chars"
Run Code Online (Sandbox Code Playgroud)

或者,将两个字节0x0f 0x11017 021八进制)通过管道传输到注释中提到的命令:

$ printf "\x0f\x11" | somecmd...
$ printf "\017\021" | somecmd...
Run Code Online (Sandbox Code Playgroud)