【发布时间】:2017-01-22 13:51:58
【问题描述】:
相当简单,我的 shell (bash) 脚本中有一个 echo 语句,我想重定向到一个外部文件作为日志记录的一种方式。该脚本由 root 用户的 crontab 每小时运行一次(通过sudo crontab -e)。
我希望此日志文件与脚本位于同一目录中。
我的第一次尝试是,
echo "$(date) | blah blah" >> "$(pwd)/script.log"
但是,这显然不起作用,因为根 crontab (/root/) 的工作目录与脚本的目录不同。所以我遵循了一些关于 SO 的建议,
script_dir=$(dirname $0)
echo "$(date) | blah blah" >> "$(script_dir)/script.log"
这次,由于我还不明白的原因,日志文件保存在/下,如/script.log。
从逻辑上讲,人们会假设变量 script_dir 被评估为空字符串,因此 "$(script_dir)/script.log" 被评估为 "/script.log"。
但是作为测试,我写了一个简单的测试脚本,
echo "$(dirname $0)"
并从/ 运行它。果然,我得到了一个正确的非空输出:/home/pi/scripts/testscripts/dirname.sh(我编写的测试脚本所在的位置)。
那么交易是什么,我该如何让它发挥作用?
附言bash --version 说我目前正在运行 GNU bash,版本 4.3.30(1)-release
【问题讨论】:
-
顺便说一句,你这样做
echo "$(date) | blah blah"的意图是什么,这对我来说毫无意义。 -
@Inian 我的脚本在失去互联网连接时使用
shutdown -r now重新启动我的树莓派,我通过查看if条件中的ping命令的退出代码来确定。我想要记录何时发生这种情况。完整的echo语句实际上是"$(date +"%d %b %r") | $(uptime -p) | Exit ${code}. Restarting..."。 -
很公平!干杯!