파일이 bash에 있는지 테스트하는 While 루프
txt 파일이있는 경우에만 특정 변경을 수행하는 셸 스크립트를 작업 중이지만이 테스트 루프가 작동하지 않습니다. 이유가 궁금합니다. 감사합니다!
while [ ! -f /tmp/list.txt ] ;
do
sleep 2
done
"작동 안함"이라고 말하면 작동하지 않는지 어떻게 알 수 있습니까?
다음을 추가하여 파일이 실제로 존재하는지 알아낼 수 있습니다.
while [ ! -f /tmp/list.txt ]
do
sleep 2
done
ls -l /tmp/list.txt
'echo $ SHELL'을 입력하여 Bash (또는 관련) 셸을 사용하고 있는지 확인할 수도 있습니다. 나는 CSH와 TCSH가이 루프에 대해 약간 다른 의미를 사용한다고 생각합니다.
inotify-tools가 설치되어있는 경우 다음을 수행 할 수 있습니다.
file=/tmp/list.txt
while [ ! -f "$file" ]
do
inotifywait -qqt 2 -e create -e moved_to "$(dirname $file)"
done
이는 2 초마다 확인하면서 수면으로 인한 지연을 줄입니다. 필요한 것으로 예상되는 경우 더 많은 이벤트를 추가 할 수 있습니다.
나는 똑같은 문제가 있었다. 대괄호 외부;
while ! [ -f /tmp/list.txt ];
do
echo "#"
sleep 1
done
또한 루프 내부에 에코를 추가하면 루프에 들어가는 지 여부를 알려줍니다.
비슷한 문제가 발생하여 여기로 이어 져서 동일한 경험을하는 사람에게 내 솔루션을 남겨두고 싶었습니다.
내가 실행 cat /tmp/list.txt
하면 파일에 즉시 내용이 배치되는 것을 확신했지만 파일이 비어 있음을 발견했습니다 . 예상대로 작동 sleep 1;
하기 직전에 넣으면 나옵니다 cat /tmp/list.txt
. 파일이 생성 된 시간과 작성된 시간 사이에 지연이 있었음에 틀림 없다.
내 최종 코드 :
while [ ! -f /tmp/list.txt ];
do
sleep 1;
done;
sleep 1;
cat /tmp/list.txt;
이것이 누군가를 좌절시키는 30 분을 구하는 데 도움이되기를 바랍니다!
@ zane-hooper처럼 NFS에서 비슷한 문제가 발생했습니다. 병렬 / 분산 파일 시스템에서는 한 시스템에서 파일을 생성하는 것과 파일을 "보는"다른 시스템 사이의 지연이 매우 클 수 있으므로 파일 생성 후 while 루프가 종료되기 전에 최대 1 분까지 기다릴 수 있습니다. 또한 이미 삭제 된 파일을 "보는"후유증이 있습니다.)
이것은 스크립트가 "작동하지 않는다"는 착각을 불러 일으키지 만 실제로는 공을 떨어 뜨리는 파일 시스템입니다.
알아내는 데 시간이 좀 걸렸고 누군가 시간을 절약하기를 바랍니다.
PS 이것은 또한 "부실한 파일 처리기"오류의 성가신 수를 일으 킵니다.
이렇게 해
while true
do
[ -f /tmp/list.txt ] && break
sleep 2
done
ls -l /tmp/list.txt
참고 URL : https://stackoverflow.com/questions/2379829/while-loop-to-test-if-a-file-exists-in-bash
'program story' 카테고리의 다른 글
직접 실행 창에서 데이터 테이블 또는 데이터보기의 내용을 쉽게 볼 수있는 방법 (0) | 2020.10.07 |
---|---|
UIColor에서 rgb 추출 (0) | 2020.10.07 |
Google Maps Api v3-getBounds가 정의되지 않았습니다. (0) | 2020.10.07 |
읽기 전용 필드에 대해 불순한 메소드가 호출 됨 (0) | 2020.10.07 |
페이지가 자바 스크립트 지원없이로드 될 때 텍스트 상자에 커서 (자동 초점)를 배치하는 방법은 무엇입니까? (0) | 2020.10.07 |