Повне завершення вкладки Bash shell, не розгортайте ~


12

Я використовую Tab ключ багато, коли я використовую оболонку (bash).

Але мене це дратує ~ завжди розширюється /home/"user". Я не думаю, що це завжди було так; чи є спосіб зупинити таку поведінку?

Приклад:

  1. cj@zap:~$ ls ~/
  2. Натисніть Tab
  3. cj@zap:~$ ls /home/cj/

Я хотів би продовжувати мати ~/ і не до кінця /home/cj/.


2
"Я не думаю, що це завжди було так." - Програмоване завершення перевизначає налаштування читання set expand-tilde off (за промовчанням або в ~/.inputrc ).
Dennis Williamson

"bind -v | grep tilde" повертає "off expand-tilde off" ... тому я не думаю, що це допоможе.
Johan

Ви можете подивитися shopt -p direxpand.
gam3

Відповіді:


10

Відключення розширення тильди швидко і безболісно. Відкривати ~/.bashrc і вставити це:

_expand()
{
    return 0;
}

Це перекриє функцію розширення з /etc/bash_completion. Я рекомендую коментувати, що він робить вище функції, якщо ви хочете, щоб розширення повернулося в майбутньому. Зміни набудуть чинності в новому екземплярі.


хоча _expand(){ true; } коротше :)
tig

не було б _expand(){ false; }? @tig
John T

1
@John: ні, це не може бути правдою. true повертає успішний результат і успішний результат 0, так return 0 дорівнює true у статусі виходу, і return 1 дорівнює false. просто спробуйте true; echo $? і false; echo $?.
tig

@tig занадто багато програмного забезпечення мене збентежило ... codepad.org/Frb3RyAN Аналогічно, ви знайдете це у великій кількості коду (див. Верх): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf Я вважаю, що він включений у засоби GNU, щоб вказати більш реалістичний сенс, тобто "Правда, програма успішно виконана" або "помилка - програма неправильно працювала".
John T

@John: це нормально :), «Навіть Джон Т може помилятися» (не ображайтеся :))
tig

5

З новими bash_completion, здається, вам також потрібно перевизначити:

__expand_tilde_by_ref() {
  return 0
}

1

Ще компактніше:

_expand() { :; }

... як ":" є вбудованою оболонкою, еквівалентною "true" :-)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.