为什么我的launchdaemon找不到bash命令?

问题描述 投票:0回答:1

我正在编写一个 bash 脚本,根据我的耳机是否通过蓝牙连接来启用和禁用 MacBook 上的休眠功能,这样我就可以合上盖子,不受干扰地听音乐。它由 LaunchDaemon 任务每 5 秒触发一次。它使用

blueutil
命令 here,我让它在我的
Users/username/Library/Scripts folder
中运行此脚本:

#!/usr/bin/env

export PATH=$(cat /Users/klumpy/Library/Scripts/PATH)

export BLUEUTIL_ALLOW_ROOT=1

# Check if "WF-1000XM3 is connected, if yes disable sleep, if not, don't go to sleep.

echo $(blueutil --connected)
echo $(blueutil --connected | grep "WF-1000XM3")

if [[ $(blueutil --connected | grep "WF-1000XM3" -c) -ne 0 ]]; then

  sudo pmset disablesleep 1
  echo "Sleep Disabled"

else

  sudo pmset disablesleep 0
  echo "Sleep Enabled"

fi

我的 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>com.example.bluetoothsleep</string>
    <key>ProgramArguments</key>
    <array>
      <string>sudo</string>
      <string>bash</string>
      <string>/Users/klumpy/Library/Scripts/disablesleep</string>
    </array>
    <key>StandardErrorPath</key>
      <string>/Users/klumpy/Documents/Programming/bin/stderr.txt</string>
    <key>StandardOutPath</key>
      <string>/Users/klumpy/Documents/Programming/bin/stdout.txt</string>
    <key>StartInterval</key>
      <integer>5</integer>
  </dict>
</plist>

问题是,它找不到已安装的命令。

blueutil
是通过
brew
安装的,我可以在终端窗口中运行它,或者如果我从终端运行
disablesleep
文件并且它运行良好。起初,它找不到命令,所以我让它将 $PATH 打印到我的 stout.txt 文件中,我得到了这个:

/usr/bin:/bin:/usr/sbin:/sbin

这显然还不是全部。因此,我打开了一个新终端,并将 $PATH 复制到与我的脚本位于同一目录中的 PATH 文件,并且让程序导出第 3 行中的路径。我已经确认 $PATH 现在包含脚本的路径以及所有在普通终端窗口中运行

echo $PATH
时获得的其他目录。现在我从上面的程序中得到了这个输出:



Sleep Enabled

所以前两行 echo 没有做任何事情。

正常情况下,连接耳机时

blueutil --connected
会输出以下内容,未连接耳机时不会输出任何内容:

address: 94-db-56-96-b6-e0, connected (master, 0 dBm), not favourite, paired, name: "WF-1000XM3", recent access date: 2024-11-08 19:28:33 +0000

那么我做错了什么?我该如何解决这个问题?难道是我的 bash 语法错误,它实际上并没有运行

blueutil

bash shell plist launchd launch-daemon
1个回答
0
投票
  1. 第一行是一个错误:“#!/usr/bin/env bash”
  2. 导出 PATH 是一个错误:导出 PATH="/Users/klumpy/Library/Scripts:$PATH"
  3. 如果跟随字符串
    echo $(blueutil --connected)
    返回为空,则使用
    res=$(blueutil --connected); echo $res
    或使用完整路径(例如/usr/bin/blueutil)。
© www.soinside.com 2019 - 2024. All rights reserved.