2009-06-29 3 views
4

사용자에게 디렉토리 이름을 묻는 메시지를 표시하고 유효한 디렉토리로 탭을 완성 할 수있게하려고합니다.bash 스크립트에서 디렉토리 이름 읽기 및 탭 완성

지금까지 필자는 "read -e"를 사용하여 파일 및 디렉토리 모두에서 탭 완성을 수행했습니다. 나는 단지 사용자가 탭을 누를 때 디렉토리가 자동 완성되기를 원한다.

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

어떻게 사용자가 아니라 파일 디렉토리의 목록보다, 탭을 눌렀을 때 배쉬는 디렉토리 목록을 반환 할 수 있습니다 : 여기

내가 가진 무엇인가?

답변

3

많은 유연성을 제공하는 대체 방법은 compgen을 사용하는 것입니다. 내 대답을 참조하십시오 here 자세한 내용은.

+3

좋은 소리입니다. 어떤 생각을 탭으로 통합하는 방법? – nfm

0

다음은이 문제에 대한 나의 빠른 답변입니다. 어떤 이유로 나는 pushd와 popd의 사용으로 인해 실제로 컴퓨터에서 sh가 아닌 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" 

은 야곱의 반응은 아마 더 효율적이고 나보다 청소기입니다.

+1

-e -p는 _and_ files 디렉토리를 자동 완성합니다. 원래의 디렉토리를 push하고 pop하는 것이 아니라'cd -'를 사용할 수도 있습니다. – nfm

관련 문제