gpt4 book ai didi

bash - 将键绑定(bind)到读取标准输入的命令

转载 作者:行者123 更新时间:2023-11-29 09:06:05 24 4
gpt4 key购买 nike

我有一个脚本,它从标准输入读取一行并根据该行的内容执行一些操作。我需要将一个键绑定(bind)到该脚本,以便只需键入 Ctrl-t 即可调用它。当我按名称调用脚本时,它会按预期工作,但是当我按下键绑定(bind)时,它会挂起。事实上,外壳挂起,我必须杀死它。该脚本使用 read -r line。我尝试使用 cat 得到相同的结果。

脚本如下所示(文件名 read.sh):

#!/bin/bash

echo -n ' > '
read -r buf
echo "you typed $buf"

像这样绑定(bind):

bind -x '"\C-t" : "read.sh"'

最佳答案

当您按下 Ctrl+t 时您的终端设置与您刚刚通过终端启动脚本时不同。如果您将以下行添加到 read.sh,它将打印您的终端设置:

echo Terminal settings: "$(stty -a)"

现在自己运行脚本,然后按Ctrl+t运行它。您会注意到一些差异,其中最大的差异是添加了 -echo-icrnl,它们关闭了回显并更改了换行符处理。这给出了脚本挂起的外观。

您可以通过强制 tty 返回规范模式并重新添加 echo 来解决脚本中的这个问题。在进行任何 stty 更改之前,您需要保存设置并在脚本退出时恢复它们。您可以为此使用 trap

#!/bin/bash
# Save the tty settings and restore them on exit.
SAVED_TERM_SETTINGS="$(stty -g)"
trap "stty \"${SAVED_TERM_SETTINGS}\"" EXIT

# Force the tty (back) into canonical line-reading mode.
stty cooked echo

# Read lines and do stuff.
echo -n ' > '
read -r buf
echo "you typed $buf"

关于bash - 将键绑定(bind)到读取标准输入的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36828421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com