您如何在 Ubuntu 中找到“擦除”和“行终止”字符的键?

use*_*607 7 command-line shell tty history key-mapping

我是 Unix 新手,今天买了一本“Unix 编程环境”。我正在尝试书中的内容。但是其中一些没有按预期工作,例如:要终止一行并再次重新键入,应使用@字符:

$ ddtae@
date
Thu Nov 28 18:12:47 IST 2013
Run Code Online (Sandbox Code Playgroud)

我的终端

$ ddtae@
ddtae@: command not found
Run Code Online (Sandbox Code Playgroud)

另一个例子是使用#来擦除最后一个字符

$ dd#att#e#e
Run Code Online (Sandbox Code Playgroud)

作为日期出来并打印出来。

我的终端

$ dd#att#e#e
dd#att#e#e: command not found
Run Code Online (Sandbox Code Playgroud)

在我的系统中 # 用于评论

虽然他们已经提到这些字符是系统相关的。如何为我的系统找到执行上述两项任务的字符。

JRF*_*son 7

可以通过 查询和/或设置终端线路控制stty。要查看当前设置,请使用stty -a。联机帮助页提供了详细信息。

例如,stty -a您可能会发现这个 kill-line 控件:

kill = ^U
Run Code Online (Sandbox Code Playgroud)

插入符号表示按住控制键 ( Ctrl),然后键入显示的字符 ( U)。要更改 line-kill 序列,您可以执行以下操作:

$ stty kill \@
Run Code Online (Sandbox Code Playgroud)

注意:反斜杠是一个转义符,表示后面的字符将由 shell 逐字解释。

将您的 line-kill 更改为此,(文字@),您现在可以删除如下所示的行:

$ ddtae@
Run Code Online (Sandbox Code Playgroud)

注意:在上面的场景中,当您键入 时ddtae,当您键入字符时@,整行都将被删除。

恢复默认设置的一种方法(这在您无意中更改设置时非常有用)是简单地执行以下操作:

$ stty sane
Run Code Online (Sandbox Code Playgroud)

的另一个用途stty是控制字符回显。例如,一种在用户键入时隐藏用户密码的简单方法是:

#!/bin/sh
echo "Enter password"
stty -echo
read PWORD
stty  echo
echo "You entered '${PWORD}'"
Run Code Online (Sandbox Code Playgroud)