我发现这个命令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
有人可以解释一下吗:
- 我怎样才能解决这个问题?
- 这是什么
warning: line editing not enabled
意思?
答案1
您需要获取该脚本。执行. ./bind
或source ./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