在更新到Catalina(10.15.1)之前,我基于bash脚本的代理工作得很好。 我设置代理是为了在启动时执行bash脚本。 这里是plist文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>mark.battery.info</string>
        <key>Program</key>
        <string>/Users/mark/Dropbox/Exec/BatteryInfoOnBoot.sh</string>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

上次更新之后,我注意到脚本(batteryinfoont.sh)在启动时不再加载,如果我执行以下命令:

launchctl list | grep mark
-   1   mark.battery.info

我读到状态1表示:

PID-状态1表示进程没有足够的特权 访问一些文件

ref

batteryinfoont脚本非常简单:

#!/bin/bash

echo "~~~~~~~~~"  >> /Users/mark/Documents/battery-log.txt
date  >> /Users/mark/Documents/battery-log.txt
/Users/mark/Dropbox/Exec/BatteryInfo.sh >> /Users/mark/Documents/battery-log.txt

相反,BatteryInfo.sh只用于获取一些有用的信息:

#!/bin/bash

echo "Current battery percentage:"
pmset -g batt | grep -Eo "\d+%" | cut -d% -f1
echo ""

echo "Cycle count:"
system_profiler SPPowerDataType | grep "Cycle Count"
echo ""

echo "Capacity stats:"
ioreg -brc AppleSmartBattery | grep -i capacity | grep -v Legacy | grep -v BatteryData | grep -v AppleRaw
echo ""

PS:如果我手动执行脚本,脚本仍在工作:

/Users/mark/Dropbox/Exec/BatteryInfoOnBoot.sh

有什么建议吗?

最佳回复

/Users/mark/Documents/是受保护的用户文件夹(作为下载和桌面)。

通常,您可以将应用程序添加到系统首选项>隐私和安全>安全>完整磁盘访问。终端可能已经被添加了-手动执行它时没有显示错误的原因。

将shell脚本BatteryInfoOnBoot.sh中日志文件的目标移动到/Users/mark/Library/Logs/中,它就可以工作了。

证明(虚拟机-内部没有电池;-):

[email protected] ~ % cat Library/Logs/battery-log.txt 
~~~~~~~~~
Tue Dec  3 01:23:55 CET 2019
Current battery percentage:

Cycle count:

Capacity stats:

作为替代方案,您可以保持原始文件的原样,但必须将/bin/launchctl添加到"系统首选项>隐私和安全>安全>完整磁盘访问"中。

证明(内部仍然没有电池):

[email protected] ~ % cat Documents/battery-log.txt 
~~~~~~~~~
Tue Dec  3 01:32:30 CET 2019
Current battery percentage:

Cycle count:

Capacity stats: