gpt4 book ai didi

linux - 为什么 flock 从文件中删除现有文本?

转载 作者:太空狗 更新时间:2023-10-29 11:49:05 27 4
gpt4 key购买 nike

因此,我尝试使用 Flock 和该文件的一行文本来获得对文本文件的独占锁定,但是这样做会删除之前存在的任何文本。

( flock -n 200 || exit 1
echo "In critical section"
echo text >> file.txt
echo text added to file
) 200>file.txt
echo "After critical section"

如果文件有让我们说

123
214
242
232

在运行脚本后,我期待类似的东西

123
214
242
232
text

相反,我得到的只是

text

为什么会这样,我猜是它正在替换原始文件,但我不确定。

最佳答案

  • stdout (fd 1) 未重定向到 (fd 200),echo 命令写入 stdout。

  • 200>file.txt 在执行子 shell 中的命令之前截断 file.txt

  • echo text >> file.txt 追加 text

使用 >>> 而不是 > 以追加模式打开文件。

f() {
( flock -n 200 || exit 1
echo "In critical section"
echo text >> file.txt
echo text added to file
) 200>>file.txt
echo "After critical section"
}

f & f & f & f ; wait

请注意,在关键部分之外打开(截断/追加)。

否则阻塞直到锁可用不要使用-n,比较

f_fail() {
(
sleep 1
flock -n 200 || exit 1
pid=$(bash -c 'ps -p "$(ps -p $$ -oppid=)" -oppid=')
echo "$pid started"
echo text >& 200
echo "$pid done"
) 200>>file.txt
}

f_block() {
(
sleep 1
flock 200 || exit 1
pid=$(bash -c 'ps -p "$(ps -p $$ -oppid=)" -oppid=')
echo "$pid started"
echo text >& 200
echo "$pid done"
) 200>>file.txt
}


f_fail & f_fail & f_fail & f_fail & wait
f_block & f_block & f_block & f_block & wait

关于linux - 为什么 flock 从文件中删除现有文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48923330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com