flock
연동 작업 방법 중 하나입니다. 이 유틸리티는 util-linux 툴셋의 일부이며 Linux에서만 사용할 수 있습니다. 광범위한 플랫폼에서 사용할 수있는 다른 유틸리티 setlock
는 그의 daemontools 패키지에서 Daniel J. Bernstein의 유틸리티를 기반으로 합니다.
이 도구는 M. Kurenkov의 답변 ( flock
사용할 수는 있지만 그 답변에는없는)에 사용 된 것과 약간 다른 패러다임으로 작동합니다 . 하나는 setlock
프로그램을 호출하여 로드 해야하는 명령에 로드 를 연결 합니다. setlock
자체는 잠금 파일을 열고 잠그고 파일 디스크립터는 프로세스에서 열린 상태로 둡니다. 잠금은 프로세스가 수행하는 동안 지속됩니다 (열린 파일 설명자를 찾아서 닫아서 잠금을 명시 적으로 해제하도록 후속 명령이 연결되어 있지 않는 한).
문제의 경우 출력 라인을 생성하는 명령을 연동하여 쉘 내장 명령 대신 외부 echo
를 호출한다는 것을 알고 있어야합니다 echo
.
setlock mylockfile echo "$ RESULT">> ./$TEMP_DIR/$OUT_FILE
이 경우 추가 모드에서 출력 파일을 열어서 인터록 할 필요는 없습니다. 그렇다면 잠금 내에서 해당 파일을 열어야 할 것이므로 fdredir
/ 와 같은 프로그램을 사용해야합니다 redirfd
.
setlock mylockfile fdredir --1 추가 "./$TEMP_DIR/$OUT_FILE"에코 "$ RESULT"
원하는 경우 쉘 함수로 전환 할 수 있습니다.
outfile () {setlock mylockfile fdredir --append 1 "./$TEMP_DIR/$OUT_FILE" "$ @"; }
[…]
아웃 파일 에코 "$ RESULT"
또는 쉘 구문을 고수하고 인터록에서 실행되는 두 번째 쉘에 의해 해석되며, 쉘 변수가 환경 변수로 내보내지지 않은 경우 사소한 인용이 필요합니다.
setlock mylockfile sh -c 'echo' "$ RESULT" '>> "./'$TEMP_DIR'/'$OUT_FILE'" '
이것은 물론 출력 파일에 쓰는 것 이외의 것을 일반화합니다.
setlock mylockfile sh -c '… 연동; 물건… '
`pwd`
. 점 (.
) 만 사용할 수 있습니다 . 또한 변수가 포함되어 있기 때문에 전체 파일 이름을 인용해야 합니다 .