【发布时间】:2016-04-05 15:35:09
【问题描述】:
多年来,我一直在编写 shell 脚本(在本例中为 bash),并且很自在。但是我刚刚编写了一个我想通过launchd 运行的shell 脚本。现在,对于大多数 shell 脚本,我已经编写了重定向和将变量(内存驻留信息)写入文件的echoing,这是我认为必须经常发生的事情。比如:
##在日志文件中创建一行:
echo "${DATESTAMP} ${INPUT}" >> "$LOGFILE"
## 或者,在计算出一个值后将其添加到文件中
echo "${MY_EXTIP}" > "${CURRENT_IP}"
##或者,创建一个带有进程PID的文件进行监控
echo "${SSH_TUN_IP}" > "${SSH_PIDFILE}"
但是,launchd 似乎 窃取 stdout(和 stderr,但 stderr 对此并不重要),这似乎是不可能的。现在这可能是我学习 python 或 perl 来解决这个问题的好时机,但我认为人们实际上必须知道如何在 bash 中做到这一点。
TL;DR,当从 launchd 运行时,我如何将内存驻留信息获取到 bash 中的文件
非常感谢任何帮助。 c
【问题讨论】:
-
你说的“好像偷东西”是什么意思?
-
这篇文章 (erikslab.com/2011/02/04/logging-with-launchd) 可能会有所帮助。
-
[回复 John Hascall] 是的,已经看到该页面已经在寻找答案,它允许您获取日志文件示例(我的第一个示例)并使其成为非问题,但对第二个或第三个示例没有帮助(功能相同,查找值并将数据输入文件)
-
[回复 chepner] 来自 launchd 手册页:StandardOutPath
此可选键指定在使用 stdio(3) 时发送到 stdout 的数据应使用哪个文件。这意味着这样的事情:# echo "fred" > /tmp/myfile doesn't work -
它不一定意味着类似于 # echo "fred" > /tmp/myfile 不起作用,因为新的重定向重新打开
stdout并覆盖之前的重定向由launchd制作。你真的试过了吗?
标签: macos bash shell stdout launchd