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을 억제합니다찾다.