API 使用包含所有内容的 XML 文件进行响应。我希望该 XML 中的一些数据出现在我的 conky 的某些部分中
我有一个 bash 脚本来获取和解析数据。看起来像
#!/bin/sh
if [ -z $1 ]; then
echo "missing arguments"
exit 0;
fi
curl -s http://example.com/api.php | xmllint --xpath "//${1}/text()" -
在 .conkyrc 我有
${color slate grey}Number of cats: ${color }
${execi 3600 myscript.sh cats}
${color slate grey}Color of the day: ${color }
${execi 3600 myscript.sh color}
${color slate grey}Some other stuff: ${color }
${execi 3600 myscript.sh stuff}
这很好用,但是即使我需要的所有数据都是第一次传递,我每个间隔都会向 API 发出 3 个请求。
显而易见的解决方案是更改 bash 脚本以将 API 响应保存到带有时间戳的临时文件中。无论脚本在哪里运行,首先检查临时文件的时间戳以查看它是否已过期(或不存在)。如果是这样,请将其删除并发出新的 curl 请求。如果不是,请将 curl 语句替换为
cat tempfile.xml | xmllint
但我不喜欢把临时文件到处乱扔,或者担心潜在的竞争条件。有没有办法从我的脚本中返回我需要的所有数据并将其提供给 conky 以存储为 conky 变量,然后将它们打印在正确的位置?或者更广泛地说,我应该如何改进这一点?