zsh에서는 클러스터 사용이 실패하지만 bash에서는 작동합니까?

zsh에서는 클러스터 사용이 실패하지만 bash에서는 작동합니까?

답변에 메커니즘을 사용하십시오.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

zshbash두 진영이 울타리 너머로 엿보고 서로의 아이디어를 훔치려는 노력에도 불구하고 그렇지 않습니다. 또한 이로 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
)

관련 정보