Как установить завершение без учета регистра в экземпляре bash без поддержки Readline

У меня есть экземпляр bash без поддержки Readline, т.е. этот bash вызывается с параметром --noediting. Причина в том, что этот экземпляр bash используется другой программой.

Другая программа хочет знать, как этот bash завершит командную строку, и для этого выдает compgen команды в оболочке bash, например

compgen -o default I

Это отлично работает в моем bash без поддержки Readline. Вот пример: допустим, мы находимся в каталоге с тремя файлами:

IMG_1234.JPG
about.html
index.html

Команда compgen -o default I распечатывает должным образом

IMG_1234.JPG

Однако теперь я хочу переключиться на завершение без учета регистра. Обычно выдаю в оболочке

bind 'set completion-ignore-case on'

а в экземпляре bash с поддержкой Readline все, как ожидалось: compgen -o default I печатает

IMG_1234.JPG
index.html

Однако в моем экземпляре bash без поддержки Readline команда bind ничего не делает, и я все равно получаю только совпадение IMG_1234.JPG.

Итак, мой вопрос: как я могу установить предложения завершения без учета регистра (при использовании compgen) в экземпляре bash, который вызывается без поддержки Readline?


person halloleo    schedule 01.04.2015    source источник
comment
Попробуйте настроить / etc / inputrc   -  person Shane Voisard    schedule 01.04.2015
comment
Мой файл ~ / .inputrc содержит set completion-ignore-case on, но bash без поддержки Readline, похоже, игнорирует этот файл.   -  person halloleo    schedule 01.04.2015
comment
inputrc предназначен для readline.   -  person pynexj    schedule 01.04.2015
comment
@whjm Совершенно верно! Поскольку в вопросе четко указано, я хочу переключиться на предложения завершения без учета регистра через compgen в --noediting bash (который не использует inputrc).   -  person halloleo    schedule 01.04.2015


Ответы (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

Версия Bash:

GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

Если ваша версия bash отличается, подумайте об обновлении, так как я не могу воспроизвести вашу проблему с 4.3.11. (И вы, вероятно, захотите перенаправить stderr из команды bind; я оставил его, чтобы вы могли видеть, как он выполняется).

person Toby Speight    schedule 11.01.2016