Завершение вкладки оболочки Bash, не расширяйте ~

12

Я часто использую Tabключ, когда использую оболочку (bash).

Но меня раздражает то, что ~всегда расширяется до /home/"user". Я не думаю, что это всегда было так; Есть ли способ остановить это поведение?

Пример:

  1. cj@zap:~$ ls ~/
  2. Нажмите Tab
  3. cj@zap:~$ ls /home/cj/

Я хотел бы продолжать иметь ~/и не в конечном итоге /home/cj/.

Johan
источник
2
«Не думаю, что так было всегда». - Программируемое завершение отменяет настройку readline set expand-tilde off(по умолчанию или установлена ​​в ~/.inputrc).
Приостановлено до дальнейшего уведомления.
"bind -v | grep tilde" возвращает "установить расширение-тильду выкл" ... так что я не думаю, что это поможет.
Йохан
Вы могли бы взглянуть на shopt -p direxpand.
gam3

Ответы:

10

Отключение расширения тильды происходит быстро и безболезненно. Откройте ~/.bashrcи вставьте это:

_expand()
{
    return 0;
}

Это переопределит функцию расширения из /etc/bash_completion. Я бы порекомендовал прокомментировать, что он делает над функцией, на случай, если вы захотите расширить его в будущем. Изменения вступят в силу в новом экземпляре.

Джон Т
источник
хотя _expand(){ true; }короче :)
тиг
не так ли _expand(){ false; }? @tig
Джон Т
2
@ Джон: нет, это должно быть правдой. trueвозвращает успешный результат, и успешный результат равен 0, поэтому return 0равен trueв состоянии выхода и return 1равен false. просто попробовать true; echo $?и false; echo $?.
Тиг
@tig слишком много программирования сбило меня с толку ... codepad.org/Frb3RyAN Точно так же вы найдете это в большом количестве кода (см. верхнюю часть): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf Я бы предположил, что он включен в инструментах GNU для обозначения более реалистичного значения, т. е. «True, программа успешно запущена» или «false - программа работает неправильно».
Джон Т
@Джон: это нормально :), «Даже Джон Т может ошибаться» (не обижайтесь :))
tig
5

С более новым bash_completion кажется, что вам также нужно переопределить __expand_tilde_by_ref:

__expand_tilde_by_ref() {
  return 0
}
mjmt
источник
1

Еще более компактно:

_expand() { :; }

... as ":" - это встроенная оболочка, эквивалентная "true" :-)

Джо
источник
1

Более точная настройка будет

_filedir_xspec () { :; }
Александр Щебликин
источник