【发布时间】:2015-04-12 01:48:18
【问题描述】:
我有一个 bash 脚本,它发出一个 cURL 请求并将输出写入一个名为 resp.txt 的文件。我需要创建一个独占锁,以便我可以写入该文件,而不必担心多个用户同时运行脚本并编辑文本文件。
这是我希望锁定文件、执行请求并写入文本文件的代码:
(
flock -e 200
curl 'someurl' -H 'someHeader' > resp.txt
) 200>/home/user/ITS/resp.txt
这是解决此问题的正确方法吗?我的实际脚本比这长一点,但是当我将flock 语法添加到 bash 脚本时,它似乎中断了。我的理解是,这会创建一个可以写入锁定文件的子shell。我只是不确定是否需要像这样将文件描述符添加到 curl 请求中:
curl 'someurl' -H 'someHeader' 200>resp.txt
如果有人可以解释这些文件描述符是如何工作的,并让我知道我是否正确锁定了文件,那就太棒了!
【问题讨论】:
-
为什么要将 curl 响应通过管道传输到文件中?
-
当你添加这个时,你的脚本是如何“中断”的?
-
因为我需要从响应中提取一个 ID 以在下一个请求中使用。我是否有理由不这样做,或者有更好的方法来完成同样的事情?基本上我有一些请求需要从中获取信息。我想我可以重写一些东西,它只是与 cURL 请求和诸如此类的东西变得很长。我可以使用
|并继续下一行的脚本吗?我虽然它必须在一条线上。 -
这仍然不能告诉我什么坏了。你有错误吗?小猫会吃你的脸吗?
-
所以问题是你添加flock时无法从
resp.txt读取请求?我打赌curl不能写入文件。尝试>&200,就像我在之前的评论中建议的那样,让它写信给flocked fd。此外,您不会相信人们多久会忽略他们收到的错误消息文本。我的意图不是在那里侮辱你。
标签: linux bash file-descriptor flock