답변에 메커니즘을 사용하십시오.https://unix.stackexchange.com/a/274499/5132Z 셸에서:
(
flock -x 200
echo "test";
) 200>mylockfile2
반품
zsh: parse error near `200'
Bash에서는 잘 작동합니다. 여기서 무엇이 잘못되었을 수 있습니까?
답변1
Bash는 사용자가 일반적인 리디렉션 구문을 사용하여 9보다 큰 fd를 직접 열 수 있도록 하는 유일한 셸입니다. 따라서 다른 쉘에서는 이 명령이 동일하며 (...) 200 1>mylockfile2
이는 구문 오류입니다. posix는 0-9에 대해서만 지원을 요구합니다. 잠금과 함께 사용된 fd가 이미 사용 중이 아닌지 확인하려면 특별히 고안된 구문을 사용하여 다음 사용 가능한 fd를 열 수 있습니다.
(foo "$lockfd";...) {lockfd}>file
답변2
zsh
bash
두 진영이 울타리 너머로 엿보고 서로의 아이디어를 훔치려는 노력에도 불구하고 그렇지 않습니다. 또한 이로 flock
인해 util-linux
휴대성이 제한될 수도 있을 것 같습니다. ZSH 솔루션은 다음 명령 zsystem
을 제공하는 이 모듈을 사용할 수 있습니다 flock
.
#!/usr/bin/env zsh
zmodload zsh/system
(
local lockvar
touch lockfile
zsystem flock -f lockvar lockfile
print >&2 got lock
sleep 10
zsystem flock -u $lockvar
print >&2 end lock
)