Selesai tab bash shell, jangan perluas ~

12

Saya sering menggunakan Tabkunci ketika saya menggunakan shell (bash).

Tapi saya merasa jengkel karena ~selalu bertambah /home/"user". Saya tidak berpikir selalu seperti ini; adakah cara untuk menghentikan perilaku ini?

Sebuah contoh:

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

Saya ingin terus memiliki ~/dan tidak berakhir dengan /home/cj/.

Johan
sumber
2
"Kurasa tidak selalu seperti ini." - Penyelesaian yang dapat diprogram mengabaikan pengaturan readline set expand-tilde off(default atau set in ~/.inputrc).
Dijeda sampai pemberitahuan lebih lanjut.
"bind -v | grep tilde" mengembalikan "nonaktifkan memperluas-tilde" ... jadi saya tidak berpikir itu akan membantu.
Johan
Anda mungkin melihat shopt -p direxpand.
gam3

Jawaban:

10

Menonaktifkan ekspansi tilde cepat dan tidak menyakitkan. Buka ~/.bashrcdan masukkan ini:

_expand()
{
    return 0;
}

Ini akan menggantikan fungsi ekspansi dari /etc/bash_completion. Saya akan merekomendasikan mengomentari apa yang dilakukannya di atas fungsi jika Anda ingin ekspansi kembali di masa depan. Perubahan akan berlaku dalam instance baru.

John T
sumber
meskipun _expand(){ true; }lebih pendek :)
tig
bukankah begitu _expand(){ false; }? @tig
John T
2
@ John: tidak, itu pasti benar. truemengembalikan hasil yang sukses dan hasil yang sukses adalah 0, jadi return 0sama dengan truedalam status keluar, dan return 1sama dengan false. coba saja true; echo $?dan false; echo $?.
tig
@tig terlalu banyak pemrograman telah membuatku bingung ... codepad.org/Frb3RyAN Demikian pula, Anda menemukan ini dalam banyak kode (lihat di atas): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf Saya akan menganggap itu sudah diaktifkan dalam alat GNU untuk menunjukkan makna yang lebih realistis, yaitu "Benar, program berjalan dengan sukses" atau "salah - program berjalan dengan tidak benar".
John T
@ John: tidak apa-apa :), «Bahkan John T bisa salah» (jangan tersinggung :))
tig
5

Dengan bash_completion yang lebih baru, sepertinya Anda juga perlu mengganti __expand_tilde_by_ref:

__expand_tilde_by_ref() {
  return 0
}
mjmt
sumber
1

Bahkan lebih kompak:

_expand() { :; }

... as ":" adalah shell yang setara dengan "true" :-)

Joe
sumber
1

Kustomisasi yang lebih tepat adalah

_filedir_xspec () { :; }
Alexander Shcheblikin
sumber