无法在使用键绑定调用的 Bash 函数中输入文本

无法在使用键绑定调用的 Bash 函数中输入文本

我在文件中添加了一个简单的函数.bashrc,并使用命令将其绑定到组合键bind。该函数提示用户使用进行输入read,如下所示:

myscript() {
    read -p "Enter input text: " input_text
    echo "$input_text"
}

然后我将这个函数绑定到Ctrl+G组合键,bind如下所示:

bind -x '"\C-g":myscript'

当我按下Ctrl+时G,函数被调用,提示符"Enter input text: "被显示,但我似乎无法输入任何内容。光标只是闪烁,什么也没发生。

我不确定是什么导致了这个问题。如何在使用键绑定调用的 Bash 函数中启用输入?

更新:

感谢斯内尔,我更新了该函数如下:

myscript() {
    echo -n "Enter input text: "
    read -e input_text
    echo "$input_text"
}

现在它可以按预期运行了。

答案1

听起来您遇到的问题可能与您在后台作为 shell 命令运行该函数而不是在前台作为交互进程运行该函数有关。

您可以尝试通过在命令中myscript添加选项来修改您的函数以在前台运行,如下所示:-iread

myscript() {
    read -ei "Enter input text: " input_text
    echo "$input_text"
}

这将启用命令的交互式编辑read,当通过键绑定调用该函数时,您可以输入。

或者,您可以修改bind命令以使用选项在前台运行该函数-x,如下所示:

bind -x '"\C-g":myscript; bash -i'

最后的命令bash -i将启动一个新的交互式 shell 会话,当通过键绑定调用该函数时,该会话将允许您输入。

相关内容