【问题标题】:Bash Read Escaped Characters and Normal CharactersBash 读取转义字符和普通字符
【发布时间】:2013-03-29 22:32:39
【问题描述】:

我想在 按下任何键时在 bash 中阅读,无论是箭头键、数字、字母还是标点符号,而不按 Enter。

这是我想出的最接近的,除了当按下转义键时,它会溢出到下一个输入。此外,转义键会读取但不会回显。

#!/bin/bash

read -r -n 1 -d $'\n' -p 'input> ' line
echo -en "\n"
echo "$line"

【问题讨论】:

    标签: bash shell input io


    【解决方案1】:

    有点hacky/肮脏的方式,但应该适用于用户交互式shell...

    read -n1 -s -p 'input> ' line; read -t 0.1 -n2 -s line2
    line="$line$line2"
    

    现在,由您决定是否将 <ESC>[A 转换为字符串 <UP>

    注意:如果标准输入被重定向(例如,从管道/文件...),它很可能会失败

    【讨论】:

    • "hacky/dirty"... 几乎完美。
    • 刚刚意识到 TLDP 已经给出了类似的方法:tldp.org/LDP/abs/html/escapingsection.html#BASHEK
    • 是的。但是,此示例不适用于 OS X,因为 Mac 上的读取时间需要为正整数。 TLDP 程序工作的唯一方法是,在第一次读取之后可以有非常短的读取时间。
    • ^^ 正确。正如我所说,它只适用于交互式外壳,当用户要手动按下一个键时。 &正如你所发现的,它不适用于 OSX。但在 OSX 上,您仍然可以编译自定义二进制文件 myread 并将其用作 line=`myread`...
    • 长转义序列呢? (例如,我的 Ctrl-F2 键会生成“\e[O1;5Q”。那么真正快速的打字机呢?我很确定有时会在 0.1 秒内按下多个键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多