2009-06-29 4 views
4

Je souhaite demander à l'utilisateur un nom de répertoire et lui demander de le compléter dans un répertoire valide. Jusqu'ici, j'ai terminé l'exécution des tabulations pour les fichiers et les répertoires en utilisant "read -e". Je veux seulement que les répertoires soient autocompleted quand l'utilisateur presse la tabulation.Lecture et tabulation d'un nom de répertoire dans un script bash

Voici ce que j'ai:

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

Comment puis-je faire revenir bash seulement une liste de répertoires lorsque l'utilisateur appuie onglet plutôt qu'une liste de fichiers et répertoires?

Répondre

3

Une approche alternative qui vous donne beaucoup de flexibilité consiste à utiliser compgen; Voir ma réponse here pour plus de détails.

+3

Ça sonne bien. Une idée de comment l'intégrer avec des tabulations? – nfm

0

Voici ma réponse rapide au problème. Pour une raison quelconque, j'ai dû utiliser bash et pas sh sur mon ordinateur, en raison de l'utilisation de pushd et popd. Je pense que c'est assez commenté pour que je ne m'explique pas plus.

#!/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" 

Mais la réponse de Jacob est probablement plus efficace et plus propre que la mienne.

+1

read -e -p autocomplète les deux répertoires _et_ fichiers. Vous pouvez également utiliser 'cd -' plutôt que de pousser et d'ouvrir le répertoire d'origine. – nfm

Questions connexes