Macos 用于launchd的Shell编程
我已经编写shell脚本(在本例中是bash)很多年了,而且我很乐意这样做。不过,我刚刚编写了一个shell脚本,希望通过Macos 用于launchd的Shell编程,macos,bash,shell,stdout,launchd,Macos,Bash,Shell,Stdout,Launchd,我已经编写shell脚本(在本例中是bash)很多年了,而且我很乐意这样做。不过,我刚刚编写了一个shell脚本,希望通过launchd运行该脚本。现在,对于我编写的大多数shell脚本,重定向和变量(内存驻留信息)到文件的echoing是我认为必须经常发生的事情。例如: ##在日志文件中创建一行: echo“${DATESTAMP}${INPUT}”>>“$LOGFILE” ##或者,在计算出一个值后,将其添加到文件中 echo“${MY_EXTIP}”>“${CURRENT_IP}” ##或
launchd
运行该脚本。现在,对于我编写的大多数shell脚本,重定向和变量(内存驻留信息)到文件的echo
ing是我认为必须经常发生的事情。例如:
##在日志文件中创建一行:
echo“${DATESTAMP}${INPUT}”>>“$LOGFILE”
##或者,在计算出一个值后,将其添加到文件中
echo“${MY_EXTIP}”>“${CURRENT_IP}”
##或者,使用进程的PID创建一个文件以进行监视
echo“${SSH\u TUN\u IP}”>“${SSH\u PIDFILE}”
然而launchd似乎窃取了stdout(和stderr,但stderr对这一点并不重要),使得这看起来是不可能的。现在,对于我来说,学习python或perl来解决这个问题可能是一个很好的时机,但我认为人们必须知道如何在bash中实现这一点
TL;DR,从launchd运行时,如何将内存驻留信息获取到bash中的文件
非常感谢您的帮助。
c一种可能的解决方案:将echo输出发送到文件描述符,而不是将stdout重定向到文件,因为控制应用程序(在本例中是启动的)可能已经关闭/重定向了stdout/stderr 基本上可以:
exec 3> ${LOGFILE} # Associate file descriptor 3 to LOGFILE
echo "my message" >&3 # Write to file descriptor 3
exec 3>&- # Close file descriptor 3
你所说的“似乎在偷盗”是什么意思?这篇文章()可能会有所帮助。[回复John Hascall]是的,你已经看到了寻找答案的页面,它允许你以日志文件为例(我的第一个示例),使其成为一个非问题,但对第二个或第三个示例没有帮助(功能相同,找到一个值,并将数据输入文件)[在launchd手册页中回复chepner]:StandardOutPath此可选键指定在使用stdio(3)时,应使用哪个文件将数据发送到stdout。这意味着类似这样的内容:#echo“fred”>/tmp/myfile不起作用它不一定意味着像#echo“fred”>/tmp/myfile不起作用,因为新的重定向会重新打开
stdout
,并覆盖launchd
以前所做的重定向。你真的尝试过吗?