2009-06-29 2 views
4

Ich möchte den Benutzer für einen Verzeichnisnamen auffordern, und sie Tab-Complete zu einem gültigen Verzeichnis haben.Lesen und tab-Vervollständigen eines Verzeichnisnamens in einem Bash-Skript

Bis jetzt habe ich Tab-Completion funktioniert für Dateien und Verzeichnisse mit "read -e". Ich möchte nur Verzeichnisse automatisch vervollständigen, wenn der Benutzer die Registerkarte drückt.

Hier ist, was ich habe:

echo "Enter a directory" 
read -e -p "> " DEST 

Wie kann ich nur machen bash eine Liste von Verzeichnissen zurück, wenn der Benutzer Tab drückt, anstatt eine Liste von Dateien und Verzeichnisse?

Antwort

3

Ein alternativer Ansatz, der Ihnen eine große Flexibilität bietet, ist die Verwendung von compgen; siehe meine Antwort here für Details.

+3

Klingt gut. Irgendeine Idee, wie man das mit Tabbing integriert? – nfm

0

Hier ist meine schnelle Aufnahme des Problems. Aus irgendeinem Grund musste ich eigentlich bash und nicht sh auf meinem Computer verwenden, wegen der Verwendung von Pushd und Popd. Ich denke, es ist gut kommentiert genug für mich, um es nicht weiter zu erklären.

#!/bin/sh 
tempdir=`mktemp -d` 

# save the current directory 
pushd . 

# make a new folder, then make a bunch of new directories 
# mirroring those in our current directory 
for i in $(find . -type d); do mkdir "$tempdir/$i" ; done 

# change to the temporary directory 
cd "$tempdir" 

echo "Enter a directory" 
read -e -p ">" DEST 

echo "You told me $DEST" 

# return to our original directory 
popd 

# clear out that temporary directory we made 
rm -rf "$tempdir" 

Aber Jakobs Antwort ist wahrscheinlich effizienter und sauberer als meine.

+1

lesen -e -p AutoComplete beide Verzeichnisse _and_ Dateien. Sie können auch "cd-" verwenden, anstatt das ursprüngliche Verzeichnis zu verschieben und zu öffnen. – nfm