Dizin adını tutan bir ortam değişkeni için bash otomatik tamamlama


10

Diğer şeylerin yanı sıra, Linux Mint 14'te bash 4.2.37 kullanıyorum.

Bir ortam değişkeninin adını yazarak otomatik olarak tamamladığımda, değişkenin Tabadını ve ardından bir boşluğu genişletir.

Değişkenin değeri bir dizin adı olursa, değişkenin adına genişletilmesini ve bunu izlemesini istiyorum /.

Örneğin, şunu yazarsam:

$ ls $HOM<tab>

şu şekilde genişler:

$ ls $HOME _

burada _imlecin konumunu işaretler. Sorun genellikle daha sonra ana dizinin altında bazı dosya veya dizinin adını yazmaya devam etmek istiyorum, yani yazmanız gerekir backspaceve sonra /.

Bu yüzden yukarıdakilerin genişlemesini istiyorum :

$ ls $HOME/_

Tüm değişken adını yazdığımda da aynı şey olur; sonra ls $HOME, tabbir boşluk ekler ve ben bir eklemek istiyorum /.

(Ve tabii ki /değişkenin değeri bir dizin adı değilse bir eklemek istemiyorum .)

Bash komutlarını kullanarak ya da güncelleyerek istediğim gibi davranmasını söyleyebileceğim bir yol var mı $HOME/.inputrc?

Not: Özellikle tabistediğim gibi davranmanın bir yolunu arıyorum . Farklı tuş vuruşlarıyla aynı davranışı elde etmenin yolları ilginç olurdu, ancak soruma cevap vermeyecekti.

( /etc/profile.d/bash_completion.shSistemimde devre dışı kaldığım için kötü etkileşime girdi set -o nounset. Hızlı bir deneme bunun muhtemelen sorumla alakalı olmadığını gösteriyor.)

Bu arada, tcsh bunu yapar: bir ortam değişkeni verildiğinde $FOOBAR, yazmak bir dizine başvuruyorsa $FOOBA<tab>genişler, $FOOBAR/yoksa $FOOBARboşlukludur. Hayır, bu beni tcsh'a geri dönmeye ikna etmek için yeterli değil. zsh bunu da yapıyor.


+1 Maceraperest hissetmeniz halinde , kod İşte .
l0b0

@ l0b0: (a) Zaten sahibim. (b) Kendimi bu kadar maceracı hissetmiyorum . (c) Programlanabilir bir tamamlama olduğu varsayılmaktadır .
Keith Thompson

Yanıtlar:


6

Bu özellik 2014-02-26 sürümlerinde yayınlanan bash 4.3 sürümünde uygulanmaktadır.

NEWSDosyadan alıntı yapma (en üst düzeyde bulunur bash-4.3.tar.gz, ayrıca GPG imzasına da bakın ):

Sözcük tamamlama kodu, kabuk değişkeni içeren bir dosya adının dizin adına genişleyip genişlemediğini /ve sözcüğe uygun şekilde eklenip eklenmediğini denetler . Komut tamamlama yapılırken aynı kod komut adlarındaki kabuk değişkenlerini genişletir.

Kaynaktan oluşturulmuş bir kopyayla yapılan hızlı bir deneme,

$ ls $HOM<tab>

şimdi genişliyor

$ ls $HOME/

(Bu arada, zsh da bunu yapar.)


1
Bunun için elle bash kurmak zorunda kaldı. 4.3 fedora 20 depolarında değil.
jozxyqk

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.