我用来INPUTRC
将.inputrc
文件从我的主文件夹中移走。它曾经可以工作(就像我的一样GNU bash, version 5.1.4
),但是在 bash 中version 5.1.16
,我发现INPUTRC
不再受尊重。
$ which $SHELL
/usr/bin/bash
$ $SHELL --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
. . .
$ env | grep INPUTRC
INPUTRC=/home/foo/bin/.inputrc
$ ls ~/.inputrc
ls: cannot access '/home/foo/.inputrc': No such file or directory
- 我的
INPUTRC
文件包含
set echo-control-characters off
set completion-ignore-case on
但两者都没有受到尊重。
如果我创建一个
~/.inputrc
包含以上两行的文件,那么它们都可以工作。如果我创建一个
~/.inputrc
指向 my 的文件/home/foo/bin/.inputrc
,那么这两种情况都可以。但是,如果我删除该
~/.inputrc
文件并INPUTRC
再次单独使用,那么这两种情况都不再有效。
所以,
- 我使用的 bash 版本有错误吗?
- 我如何判断 bash 是否荣誉
INPUTRC
? - 您建议如何调试该问题?
更新:
感谢@meuh,他给出了一种找到真正原因的方法,正如我发现的(甚至在发布问题之前),如果我这样做,bind -f /home/foo/bin/.inputrc
我的终端将完全锁定,并且只会响应“^C”,甚至盲目输入reset
进入它并按回车键不会修复它,而我的两行版本bind -f
可以。因此,也许我古老的 .inputrc 文件(>20 年前)正在对新的 bash 造成一些麻烦,并且使用 INPUTRC 会比 ~/.inputrc 更明显地触发它。
通过反复试验,我找到了导致问题的原因,如下:
$ cat .inputrc.nok
set editing-mode emacs
set horizontal-scroll-mode Off
set keymap emacs-meta
set echo-control-characters off
set completion-ignore-case on
接着就,随即,
bind -f .inputrc.nok
将锁定终端会话并且- 指向
INPUTRC
它不会有任何效果。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu Jammy Jellyfish (development branch)
Release: 22.04
Codename: jammy
$ apt-cache policy bash
bash:
Installed: 5.1-6ubuntu1
Candidate: 5.1-6ubuntu1
Version table:
*** 5.1-6ubuntu1 500
500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
100 /var/lib/dpkg/status
更新2:
实际上,这不仅仅是 Ubuntu Jammy 的问题,我回到 Ubuntu 18.04.1,发现行为完全一样。然而,@Kusalananda 一切都很好,所以如果有人使用 Ubuntu,请尝试一下。谢谢。