警告:未启用行编辑

警告:未启用行编辑

我发现这个命令bind -x '"\C-r"':reset可以清除终端,但我想制作一个简单的 bash 脚本:

#!/bin/bash
bind -x '"\C-r"':reset

输出:

alfred@alfred-laptop:~/bash$ ./bind 
./bind: line 2: bind: warning: line editing not enabled

有人可以解释一下吗:

  1. 我怎样才能解决这个问题?
  2. 这是什么warning: line editing not enabled意思?

答案1

您需要获取该脚本。执行. ./bindsource ./bind使该键绑定在当前会话中处于活动状态。

正常运行时,它没有终端,因此会显示错误消息。此外,即使它可以工作,它也只会在脚本运行期间处于活动状态。

如果您希望该键绑定持久,请将该命令添加到您的~/.bashrc

答案2

我收到过类似的消息,但我的消息来自在交互式(登录)shell 之外运行的脚本;它是一个通过 CGI 脚本运行的 shell 脚本。我的消息是:

/home/richard/.bash_profile: line 4: bind: warning: line editing not enabled

尽管它实际上不在第 4 行,但bind该文件中唯一的内容是:

bind 'set completion-ignore-case on'

当然,这只有在启用行编辑时才有意义,即,如果它是一个交互式 shell。

答案3

只是想改进已接受的答案。

line editing not enabled在非交互式 shell 中运行时,您会得到“ ”,因为bind需要 TTY。

将您的命令包装bind在这样的检查中:

if [ -t 1 ]
then
    # standard output is a TTY
    bind -x '"\C-r"':reset
fi

答案4

我会测试 shell 是否是交互式的。
这是我在发行版的 bashrc 文件中找到的一段代码

# Test for an interactive shell.  There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
# if [[ $- != *i* ]] ; then
#   # Shell is non-interactive.  Be done now!
#   return
# fi

相关内容