Tab tamamlanırken bash'ın $ kaçmasını durdurmak için nasıl bash yapılır?


38

Komut satırında bu var:

ln -sf $PWD/wine-

ve sonra Tabdosya ismini tamamlamak için vurdum . Ubuntu'nun önceki sürümlerinde bu, wine-dosya isminin tamamlanması için gayet güzel çalışıyordu (ve bir yan etki $PWDo zaman genişleyecekti). Ama şimdi onu teslim ediyor

ln -sf \$PWD/wine-

Bu da demek istediğim şey değildi ve dosya tam anlamıyla başlamadığı için hiçbir şeyi tamamlamıyor $.

Daha az kırılmış davranışa nasıl geri dönebilirim?

set bunların geçerli ayarlarım olduğunu söylüyor:

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor

2
Bu hatadan etkilenirseniz, lütfen aşağıdaki URL altında oylamayı düşünün (giriş yapılması gerekir): bugs.launchpad.net/ubuntu/+source/bash/+bug/778627/…
cripton

Yanıtlar:


36

Bash sürümleri> = 4.2.29’un yeni bir direxpandshopt ayarına sahip olduğunu buldum . ( man docs/bash.1Yeni bir bash kontrol edip etmediğinizi veya satır 8951'den bash.1'e bakın )

Eğer biri Quantal Quetzal 12.10 kullanıyorsa veya yeni bir bash a basarsa (veya kontrol edip oluşturur), o zaman:

shopt -s direxpand

Bana istediğim, ihtiyaç duyduğum ve sevdiğim davranışları veriyor.

Geçici Çözüm: Bu arada, Ctrl+ Alt+ Eyerine Tabbenim de istediğimi yapar. Ama garip.

BTW, "bash tab değişken genişleme sorusu?" Adı verilen birkaç konu var. içinde gnu.bash.bug . Onları okuyarak bilgiyi burada buldum.


2
direxpand ile bir bash sürümü Precise'a doğru gidiyor (12.04): Bkz. bugs.launchpad.net/bugs/778627
keturn

7
Devasa yolumu genişletmemiş olsaydım ve tamamlanmamış bir kaçış değişkeni kullanmaya devam edersem daha iyi olurdu.
jozxyqk

@jozxyqk Hiç yol genişletme özelliğini kullanmanın bir yolunu buldunuz mu?
Ungeheuer

@Ungeheuer Şu anda 4.4.19Ubuntu 18.04'te bash kullanıyorum ve çalışıyor. Bu ne zaman değişti emin değil.
jozxyqk

2

_filedir()üst düzey bash_completion betiğinde arama yapın ve satırı değiştirin

compopt -o filenames 2>/dev/null

için

compopt -o filenames -o noquote 2>/dev/null

12.04 GNU bash, 4.2.25 versiyonunda bu öneri şu hatayı veriyor:compopt: noquote: invalid option name
arielf

1

12.04'lü olanlar (benim gibi) için $ PWD yerine ~ + kullanabilirsiniz.

Örneğin :

cd /bin
echo ~+/ls
/bin/ls

1

Güncellenen bash ile bile, $hala kaçtığını buluyordum .

  • bash-completion (1:2.1-3.fc20)Paketin çıkarılması
  • veya sadece kaynak değil /etc/bashrcgelen ~/.bashrcdüzeltmek gibiydi.

Artık normalde alışkın olduğum ancak henüz farketmediğim bazı özellikleri kaçırdığımdan şüpheleniyorum.


Alternatif (en azından Fedora 26 için), export BASH_COMPLETION_VERSINFO=0kaynak yapmadan önce ekleyin /etc/bashrc. Bu sorunlu senaryo zaten kaynak olduğunu düşündürüyor.



0

'Complete_fullquote' kabuğu seçeneğini devre dışı bırakmak işi yapar:

shopt -u complete_fullquote

$ shopt -u complete_fullquote -bash: shopt: complete_fullquote: geçersiz kabuk seçeneği adı
Anton Gorev

0
shopt -u progcomp

Bu benim için düzeltti, aynı zamanda bir sürü "akıllı" tamamlama seçeneğinin de kaldırıldığını belirledi, çünkü aptalca bir şeyin kendilerine argüman olarak istemediğimi düşündüğü için orada olduğumu bildiğim dosyaları tamamlamadım. komut. Arrrgh

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.