在bash脚本中读取和制表完成目录名称

时间:2009-06-29 00:32:18

标签: bash autocomplete scripting directory

我想提示用户输入一个目录名,并让他们能够选项卡完成一个有效的目录。

到目前为止,我已经使用“read -e”为文件和目录提供了tab-completion工作。我只希望当用户按Tab键时自动完成目录。

这就是我所拥有的:

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

如何让bash仅在用户按Tab键时返回目录列表,而不是文件列表目录?

2 个答案:

答案 0 :(得分:3)

使用compgen的另一种方法是提供很大的灵活性;有关详细信息,请参阅我的回答here

答案 1 :(得分:0)

这是我对这个问题的快速看法。出于某种原因,由于使用了pushd和popd,我不得不实际使用bash而不是在我的计算机上。我认为这个评论已经足够让我不再解释了。

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

但雅各布的反应可能比我的更有效率和更清洁。