是否有一个linux命令可以读取一定数量的字符,包括控制字符?

时间:2015-05-28 19:07:07

标签: linux terminal stdin

我希望能够读取10个字符的键盘输入,并将它们存储到一个文件中。我尝试了linux命令:

read -n 10

但如果你点击ctrl-c(0x03)就会中止。我需要能够读取接下来的10个字符,无论它们是什么,包括所有控制字符,因此值为0x00到0xFF。这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以通过(暂时!)将终端置于原始模式来覆盖控制字符的行为。这将让它读取任何可用的东西。但是,读取指定的字符数将受bash在这种情况下决定做的任何事情的影响。

例如,xterm有几个合理的可移植shell脚本,它们将终端设置为原始模式,并从终端读回各种查询的响应(例如当前的字体名称)。在看起来像这样的脚本中:

exec </dev/tty                       
old=`stty -g`  
stty raw -echo min 0  time 5

$CMD $OPT "${ESC}]4;4;?^G${SUF}" > /dev/tty
read original
stty $old
original=${original}${SUF}

if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
then
    trap '$CMD $OPT "$original" >/dev/tty; exit' EXIT HUP INT TRAP TERM
else
    trap '$CMD $OPT "$original" >/dev/tty; exit' 0    1   2   5    15
fi

虽然您必须阅读整个脚本以了解它是如何工作的。这是acolors.sh(见sources)。

请记住,即使您将终端设置为读取给定数量的字符,(除非您强制执行没有超时),您将获得终端提供的内容。这可以更少,并且(例如在ncurses中调用一些调试代码),读取终端响应的程序必须处理不完整的读取以及超时。