Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 用于launchd的Shell编程_Macos_Bash_Shell_Stdout_Launchd - Fatal编程技术网

Macos 用于launchd的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}” ##或

我已经编写shell脚本(在本例中是bash)很多年了,而且我很乐意这样做。不过,我刚刚编写了一个shell脚本,希望通过
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
以前所做的重定向。你真的尝试过吗?