【问题标题】:Interactively enter non-printable characters交互式输入不可打印的字符
【发布时间】:2017-05-03 10:38:31
【问题描述】:

我知道如何使用 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

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

【问题讨论】:

  • 更改键盘设置?是否要输入 unicode 字符?还是您想通过键盘输入发送一些任意值?
  • 完全任意字节

标签: bash shell echo


【解决方案1】:

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

$ 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 == '@',
  • 0x30 == '0',
  • 0x31 == '1',
  • 0x41 == 'A',
  • 0x61 == 'a',
  • 0xa == '\n' 等等。

【讨论】:

  • 感谢您的回答!不幸的是,它不适用于我的用例。我澄清了问题
  • 那么,io.py 是适合您的解决方案吗?如果是,则将其添加为答案,您可以在 2 天后接受自己的答案。如果没有,请告诉我们,您需要什么帮助?
【解决方案2】:
while read -r line; do echo -e $line; done | some_cmd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多