在bash脚本中读取并完成目录名

在bash脚本中读取并完成目录名,bash,autocomplete,scripting,directory,Bash,Autocomplete,Scripting,Directory,我想提示用户输入一个目录名,并让他们能够将tab complete设置为一个有效的目录 到目前为止,我已经使用“read-e”实现了文件和目录的制表符完成。我只希望在用户按tab键时自动完成目录 以下是我所拥有的: echo "Enter a directory" read -e -p "> " DEST 当用户按tab键时,如何使bash只返回目录列表,而不是文件列表和目录列表?另一种给您很大灵活性的方法是使用compgen;有关详细信息,请参阅我的答案。以下是我对这个问题的快速理解。

我想提示用户输入一个目录名,并让他们能够将tab complete设置为一个有效的目录

到目前为止,我已经使用“read-e”实现了文件和目录的制表符完成。我只希望在用户按tab键时自动完成目录

以下是我所拥有的:

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

当用户按tab键时,如何使bash只返回目录列表,而不是文件列表和目录列表?

另一种给您很大灵活性的方法是使用compgen;有关详细信息,请参阅我的答案。

以下是我对这个问题的快速理解。由于某些原因,我不得不在我的计算机上使用bash而不是sh,因为使用了pushd和popd。我认为它的评论很好,我不想再进一步解释了

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


但是雅各布的回答可能比我的更有效、更清晰。

read-e-p会自动完成目录和文件。您也可以使用
cd-
,而不必按下并弹出原始目录。听起来不错。你知道如何把它和标签结合起来吗?