我有一个没有Readline支持的bash实例,即使用--noediting
选项调用此bash。原因是这个bash实例被另一个程序使用。
另一个程序想知道这个bash如何完成命令行,为此它在bash shell中发出compgen
命令,例如。
compgen -o default I
这在没有Readline支持的情况下完全适用于我的bash。这里有一个例子:让我们说,我们在一个包含三个文件的目录中:
IMG_1234.JPG
about.html
index.html
命令compgen -o default I
正确打印
IMG_1234.JPG
但是现在我想切换到不区分大小写的完成。通常我在shell中发出
bind 'set completion-ignore-case on'
在bash实例中 Readline支持所有内容都符合预期:compgen -o default I
打印
IMG_1234.JPG
index.html
但是在我的bash实例没有 Readline支持的情况下,bind
命令什么都不做,我仍然只获得IMG_1234.JPG
匹配。
所以,我的问题是:如何在没有Readline支持的情况下调用的bash实例中设置不区分大小写的完成建议(当使用compgen
时)?
答案 0 :(得分:1)
#!/bin/bash
set -e
echo "### CASE-SENSITIVE"
bash --noediting <<EOF
compgen -o default I
EOF
echo
echo "### CASE-FOLDING"
bash --noediting <<EOF
bind 'set completion-ignore-case on'
compgen -o default I
EOF
### CASE-SENSITIVE
IMG_1234.JPG
### CASE-FOLDING
bash: line 1: bind: warning: line editing not enabled
IMG_1234.JPG
index.html
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
如果您的bash版本不同,请考虑升级,因为我无法使用4.3.11重现您的问题。 (而且你可能想要从bind
命令重定向stderr;我把它留在了所以你可以看到它被执行了。