以交互方式输入不可打印的字符

时间:2017-05-03 10:38:31

标签: bash shell echo

我知道如何使用echo:

将不可打印的字符输入到命令中
echo -e '\xde\xad\xbe\xef' | some-cmd

但是如果some-cmd命令是交互式的并且稍后可能会要求输入怎么办?我希望能够继续输入不可打印的字符作为反斜杠转义序列。

因此,例如,给定以下Python脚本:

#!/usr/bin/env python3

while True:
    s = input("> ")
    print(s, len(s))

我想通过以下方式与之互动:

$ ./io.py 
> \x41
A 1
> \x42
B 1
> \xde
Þ 1
> \xad
\xad 1

即。我输入了转义值,它们在被送入程序之前就被解释了。

2 个答案:

答案 0 :(得分:0)

不确定我理解你的确切要求,但也许你想要这个:

$ awk --non-decimal-data '{for(i=1;i<=NF;i++)printf "%c", (0+("0x"$i))}' | some-cmd

然后您可以在提示符下输入由空格/制表符/换行符分隔的十六进制值 样品用法:

$ awk --non-decimal-data '{for(i=1;i<=NF;i++)printf "%c", (0+("0x"$i))}' | sponge | sed '1s/^/Output:\n/'
40
30 31 41
a 61 62 a

Output:
@01A
ab
  • 0x40 ==&#39; @&#39;,
  • 0x30 ==&#39; 0&#39;,
  • 0x31 ==&#39; 1&#39;,
  • 0x41 ==&#39; A&#39;,
  • 0x61 ==&#39; a&#39;,
  • 0xa ==&#39; \ n&#39;等等。

答案 1 :(得分:0)

while read -r line; do echo -e $line; done | some_cmd