파일을 잠그고 잠긴 파일에 쓰기 위해 무리와 파일 설명자를 사용하는 방법은 무엇입니까?

파일을 잠그고 잠긴 파일에 쓰기 위해 무리와 파일 설명자를 사용하는 방법은 무엇입니까?

cURL 요청을 하고 출력을 이라는 파일에 쓰는 bash 스크립트가 있습니다 resp.txt. 여러 사용자가 스크립트를 실행하고 동시에 텍스트 파일을 편집하는 것에 대해 걱정하지 않고 파일에 쓸 수 있도록 배타적 잠금을 만들어야 합니다. 시간.

다음은 파일을 잠그고, 요청을 수행하고, 텍스트 파일에 쓸 것으로 예상되는 코드입니다.

(
flock -e 200
curl 'someurl' -H 'someHeader' > resp.txt
) 200>/home/user/ITS/resp.txt

이것이 이 문제를 해결하는 올바른 방법입니까? 내 실제 스크립트는 이보다 약간 길지만 flockbash 스크립트에 구문을 추가하면 중단되는 것 같습니다.

누군가 이러한 파일 설명자가 어떻게 작동하는지 설명하고 파일을 올바르게 잠그고 있는지 알려주면 좋을 것입니다!

답변1

이렇게 하면 ( flock -e 200; ... ) 200> file파일이 잘리기 때문에 이것은 잘못된 것입니다.file 앞으로독점 잠금 장치를 얻게 됩니다. 나는 당신이 이렇게 해야 한다고 생각합니다:

touch resp.txt
(
  flock -e 200
  curl 'someurl' -H 'someHeader' > resp.txt
) 200< resp.txt

읽기 전용으로 열린 파일에 잠금을 설정합니다.

노트.일부 쉘은 9보다 큰 파일 설명자를 지원하지 않습니다. 또한 하드 코딩된 파일 설명자가 사용되었을 수도 있습니다. 고급 셸(bash, ksh93, zsh)을 사용하면 다음을 수행할 수 있습니다.

touch resp.txt
(
  unset foo
  exec {foo}< resp.txt
  flock -e $foo
  curl 'someurl' -H 'someHeader' > resp.txt
)

관련 정보