linux - 失败 cat 打开的 txt 文件
问题描述
我有一个脚本,它将二进制文件的输出捕获到 .txt 文件中,然后读取文本文件并向我发送电子邮件:
while :
do
# Start tunneling
#url=$(lt --port 8080 &)
lt --port 8080 > url_info.txt &
url=$(cat url_info.txt)
# Send Email
./send.sh "$url" &
wait
done
调试了一阵子,好像行url=$(cat url_info.txt)
不行。
lt --port 8080
将继续运行 util 遇到错误,然后运行并再次发送另一封电子邮件。
不知道如何使它工作。
解决方案
这是一个竞争条件。lt
开始写入文件并同时cat
开始读取它。
如果
lt
设法先将某些内容写入文件,cat
则将读取它。如果更快,那么它会读取前一个文件或一个空文件,这取决于它已经走
cat
了多远。lt
最简单的技巧是sleep 10
在它们之间添加一个,以便lt
在编写 URL 时有一个良好的开端。
一个更强大的解决方案是读取输出,lt
直到您获得所需的信息,但这需要知道命令的预期输出格式。
推荐阅读
- git - Git - 在特定提交之前压缩历史中的所有提交
- amazon-web-services - 无法启动 Redis In-Memory Data Store。Ubuntu 18.04
- php - 在 Laravel&Angular 项目中分离 AngularJS 控制器文件
- mysql - 数据库设计 SQL 和转换表
- php - 在 Magento 2.2.3 中构建自定义支付网关
- excel - 如何在 VB6 的文本框或收件箱中键入 +-*/ 来制作我的公式?
- c# - WPF - 更换功能区
- radare2 - 如何使用雷达获取地址的价值
- oracle11g - 没有归档日志的 RMAN 在线完整备份
- asp.net-mvc-4 - 使用 .NET Framework 4.5 在 ASP.NET MVC 4 中将 JSON 传递给 WebApi