for 루프 내에서 명령 동작 찾기

for 루프 내에서 명령 동작 찾기

Bash 스크립트에 다음 코드 부분이 있습니다.

for dir in $(find /etc/aaa -type d -maxdepth 1)
do
 #my code
done

#my code

디렉토리가 존재하지 않으면 /etc/aaa일부 오류와 함께 스크립트를 종료하고 싶습니다.

for 루프를 실행하기 전에 디렉터리가 존재하는지 테스트할 수 있다는 것을 알고 있습니다.

/etc/aaa그러나 디렉터리가 존재하지 않으면 종료해야 하고 그렇지 않으면 스크립트가 계속되도록 하는 다른 방법(for 루프 내부의 짧은 메서드)이 있는지 알고 싶습니다 .

현재의 경우 스크립트는 오류를 제공 find: /etc/aaa: No such file or directory하고 for 루프 이후 나머지를 계속합니다.

for 루프의 종료 상태도 0입니다.

답변1

다음을 수행할 수 있습니다.

if dirs="$(find /etc/aaa -type dir -maxdepth 1 2> /dev/null)"; then
    for dir in ${dirs}; do
        # Your code
    done
    # Your code
else
    # find failed, generate error
fi

답변2

실행 중에 루프를 종료하려는 이유를 이해할 수 없습니다. 원하는 디렉토리가 존재하지 않으면 루프를 수행할 가치가 없다고 생각합니다.

내 생각에는 다음과 같은 몇 가지 작업을 수행해야 합니다.

if [ ! -d /etc/aaa ]; do
    echo "Error"
    exit 1
else
    for files in $(ls /etc/aaa); do
        # code
    done
    # more code
fi

이것이 당신이 원하는 것이 전혀 아니라면, 당신이 달성하려는 것이 무엇인지 설명하십시오.

답변3

루프 전에 논리 테스트를 하는 것이 더 쉽다고 생각합니다. 그러나 이는 for 문을 수정한 것입니다.

for dir in `! find /etc/aaa -type d -maxdepth 1 2>/dev/null && echo error && exit`;
do
//your code
done

//your code

이것은 또한 stderr을 억제합니다찾다.

관련 정보