쉘 스크립트의 "cd" 명령은 언제 실패합니까? 이 문제를 어떻게 해결할 수 있나요?

쉘 스크립트의 "cd" 명령은 언제 실패합니까? 이 문제를 어떻게 해결할 수 있나요?

cd지난주에 완료하지 못한 쉘 스크립트가 있었는데, 실패하면 종료되는 " " 명령이었습니다 .

이 스크립트는 bash새로운 데비안 설치를 구성하는 데 사용되는 쉘 스크립트입니다. 전체 스크립트는 다음과 같습니다.debianConfigAswome.sh. 스크립트는 루트로 실행되므로 파일 시스템에 대한 전체 액세스 권한을 갖습니다.

cd스크립트가 명령을 성공적으로 실행할 수 없는 모든 이유와 이 오류를 방지하는 방법을 나열할 수 있습니까 ?

답변1

실패에는 여러 가지 이유가 있습니다 cd. 대상이 존재하지 않을 수도 있고, 대상이 디렉터리가 아닐 수도 있고, 대상 디렉터리에 액세스할 수 있는 권한이 없을 수도 있고, cd찾을 수 없을 수도 있습니다(내장 셸이기 때문에 그럴 가능성은 거의 없지만). 작업이 chdir()실패할 수 있습니다. 손상된 파일 시스템 등으로 인해

그러나 이 특별한 경우에는 스크립트의 버그처럼 보입니다. 연결한 스크립트에는 두 가지 호출이 있습니다 cd.

cd "$WORK_DIR"/nanorc || { echo "cd failed"; exit 127; }

그리고

cd $HOME || { echo "cd $HOME failed"; exit 155; }

cd $HOME일반적으로 작동해야 하기 때문에 실패한 것이 첫 번째라고 가정합니다 . 다음은 스크립트의 관련(약간 단순화된) 부분입니다.

if [ ! -d "$WORK_DIR"/nanorc  ]
then
    echo "Setting up Nanorc file for all users....please, wait!"
    git clone https://$OAUTH_TOKEN:[email protected]/gnihtemoSgnihtemos/nanorc || { echo "git failed"; exit 127; }
    chmod 755 "$WORK_DIR"/nanorc || { echo "chmod nanorc failed"; exit 127; }
     cd "$WORK_DIR"/nanorc || { echo "cd failed"; exit 127; }
fi

따라서 "$WORK_DIR"/nanorc디렉토리가 아닌 경우 디렉토리를 git생성하는 명령을 실행하십시오. nanorc첫 번째 가능한 문제는 nanorc현재 디렉토리가 아닐 수도 있는 현재 디렉토리에 생성된다는 것입니다 $WORK_DIR. 스크립트의 이 시점에서는 실제로 로 이동하지 않았 $WORK_DIR으므로 에서 스크립트를 실행하는 경우에만 작동해야 합니다 $WORK_DIR.

cd $WORK_DIR따라서 간단한 해결책은 명령 앞에 이것을 추가하는 것입니다 git.

if [ ! -d "$WORK_DIR"/nanorc  ]
then
    cd "$WORK_DIR" | { echo "cd $WORK_DIR failed"; exit 127; }
    echo "Setting up Nanorc file for all users....please, wait!"
    git clone https://$OAUTH_TOKEN:[email protected]/gnihtemoSgnihtemos/nanorc || { echo "git failed"; exit 127; }
    chmod 755 "$WORK_DIR"/nanorc || { echo "chmod nanorc failed"; exit 127; }
     cd "$WORK_DIR"/nanorc || { echo "cd failed"; exit 127; }
fi

관련 정보