Completamento della scheda della shell Bash, non espandere ~


12

Uso molto la Tabchiave quando uso la shell (bash).

Ma mi sto seccando che ~si espande sempre /home/"user". Non penso che sia sempre stato così; c'è un modo per fermare questo comportamento?

Un esempio:

  1. cj@zap:~$ ls ~/
  2. stampa Tab
  3. cj@zap:~$ ls /home/cj/

Vorrei continuare ad avere ~/e non finire /home/cj/.


2
"Non penso che sia sempre stato così." - Il completamento programmabile ignora l'impostazione readline set expand-tilde off( impostazione predefinita o impostata ~/.inputrc).
In pausa fino a ulteriore avviso.

"bind -v | grep tilde" restituisce "imposta expand-tilde off" ... quindi non credo che sarà di aiuto.
Johan

Potresti dare un'occhiata shopt -p direxpand.
gam3

Risposte:


10

La disabilitazione dell'espansione della tilde è rapida e indolore. Apri ~/.bashrce inserisci questo:

_expand()
{
    return 0;
}

Ciò sovrascriverà la funzione di espansione /etc/bash_completion. Ti consiglio di commentare cosa fa sopra la funzione nel caso in cui desideri l'espansione in futuro. Le modifiche avranno effetto in una nuova istanza.


anche se _expand(){ true; }è più breve :)
tig

non sarebbe _expand(){ false; }? @tig
John T

2
@Giovanni: no, dovrebbe essere vero. truerestituisce un risultato positivo e il risultato positivo è 0, quindi return 0è uguale allo truestato di uscita ed return 1è uguale a false. prova true; echo $?e false; echo $?.
Tig

@ troppa programmazione mi ha confuso ... codepad.org/Frb3RyAN Allo stesso modo, lo trovi in ​​molti codici (vedi in alto): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf Suppongo che sia attivato negli strumenti GNU per indicare un significato più realistico, ovvero "Vero, il programma è stato eseguito correttamente" o "falso - il programma è stato eseguito in modo errato".
John T il

@John: va bene :), «Anche John T può sbagliarsi» (non essere offeso :))
tig

5

Con la più recente bash_completion sembra che tu debba anche sostituire __expand_tilde_by_ref:

__expand_tilde_by_ref() {
  return 0
}

1

Ancora più compatto:

_expand() { :; }

... come ":" è una shell integrata equivalente a "true" :-)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.