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)
在我的系统中 # 用于评论
虽然他们已经提到这些字符是系统相关的。如何为我的系统找到执行上述两项任务的字符。
可以通过 查询和/或设置终端线路控制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)