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