2012-03-22 2 views
0

나는 디렉토리를 묻는 bash 스크립트를 작성하려고하는데, 확인 후 디렉토리를 제거한다. 또한 디렉토리가 비어 있지 않은지 사용자에게 알리고 어쨌든 제거 할 것인지 묻는 것이 필요합니다.rmdir가 EEXIST 또는 ENOTEMPTY를 반환하는지 어떻게 확인합니까?

내가 rmdir을 사용하고 디렉토리가 삭제되었는지 확인하기 위해 반환 값을 확인했는데, 왜 그런지는 알 수 없지만 지금까지 어떤 반환 값이 EEXIST 또는 ENOTEMPTY와 같은지 전혀 알지 못합니다. 지금까지 반환 한 유일한 오류 값은 1입니다.

디렉토리에 파일이있는 경우 어떤 값을 반환해야합니까?

+0

는 지금까지 시도 것을 우리에게 보여줍니다. 2 힌트 :'echo $? '가 이전 명령으로부터의 리턴을 보여줄 것이라는 것을 알고 있습니까? '0'이 반환되면 'true'를 의미하는 것을 알고 있습니까? 행운을 빕니다. – shellter

답변

2

별도로 확인하십시오. 완벽하지는 않지만 시작

if [ ! -e "$DIR" ] 
then 
    echo "ERROR: $DIR does not exist" >&2 
elif [ ! -d "$DIR" ] 
then 
    echo "ERROR: $DIR is not a directory" >&2 
elif [ ! -r "$DIR" ] 
then 
    echo "ERROR: $DIR cannot be read" >&2 
elif [ $(ls -a $DIR | wc -l) -gt 2 ] 
then 
    echo "ERROR: $DIR is not empty" >&2 
else 
    rmdir $DIR 
fi 

참고 : rmdir은 여전히 ​​실패 할 수 있습니다. 염두에 두어야 할 것은 $DIR의 상위 디렉토리에 대한 쓰기 권한이 없다는 것입니다.

0

이 코드를 시도 할 수 :

#!/bin/bash 

check_path() { 
     if [ "x$1" = "x" ] 
     then 
       echo "ERROR: You have to specify a valid path." 
       exit 1 
     fi 

     if ! [ -d "$1" ] 
     then 
       echo "ERROR: The specified path does not exists or it's not a directory" 
       exit 1 
     fi 

     X="`find \"$1\" -maxdepth 1 | tail -n 2 | wc -l`" 
     if [ $X -gt 1 ] 
     then 
       X="R" 
     else 
       X="" 
     fi 

     while [[ "x$X" != "x" && ("x$X" != "xs" && "x$X" != "xn") ]] 
     do 
       echo "The specified path ($1) is not empty. Are you sure you want to delete it anyway? (S/n)" 
       stty -echo 
       read X 
       stty echo 
     done 
     if [ "x$X" == "xn" ] 
     then 
       echo "Operation interrupted by the user." 
       exit 0 
     fi 
} 

echo -n "Please insert the path to delete: " 
stty -echo 
read DIRNAME 
stty echo 
echo 

check_path "$DIRNAME" 

echo "Removing path $1" 
echo rm -fr "$DIRNAME" 

HTH를

+0

"echo rm -fr"줄을 변경해야합니다. "echo" – dAm2K

관련 문제