首页 > 解决方案 > 失败 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 遇到错误,然后运行并再次发送另一封电子邮件。

不知道如何使它工作。

标签: linuxbashshell

解决方案


这是一个竞争条件。lt开始写入文件并同时cat开始读取它。

  • 如果lt设法先将某些内容写入文件,cat则将读取它。

  • 如果更快,那么它会读取前一个文件或一个空文件,这取决于它已经走cat了多远。lt

最简单的技巧是sleep 10在它们之间添加一个,以便lt在编写 URL 时有一个良好的开端。

一个更强大的解决方案是读取输出,lt直到您获得所需的信息,但这需要知道命令的预期输出格式。


推荐阅读