Node.js 启动Bash和节点
我在/Library/LaunchDaemons中注册了一个.plist脚本-在特定IO事件中,该脚本会触发位于/usr/local/bin(root:admin 0755)中的bash脚本 Bash脚本运行nodejs脚本 这是bash脚本:Node.js 启动Bash和节点,node.js,bash,macos,Node.js,Bash,Macos,我在/Library/LaunchDaemons中注册了一个.plist脚本-在特定IO事件中,该脚本会触发位于/usr/local/bin(root:admin 0755)中的bash脚本 Bash脚本运行nodejs脚本 这是bash脚本: if [[ $(ioreg -p IOUSB | grep Realforce -c) > 0 ]]; then echo "Realforce is present" echo 1 echo $(node ./l
if [[ $(ioreg -p IOUSB | grep Realforce -c) > 0 ]]; then
echo "Realforce is present"
echo 1
echo $(node ./lgtvcontrol/TVinputChange.js mac)
echo 2
else
echo "Realforce not detected"
fi
当我以root用户身份运行bash脚本时,我得到以下输出:
Realforce is present
1
mac 3166798437680e8a22c7093bf294fbaf connecting connected app com.webos.app.hdmi3
2
Realforce is present
1
2
当bash脚本使用用户名root通过LaunchDaemon运行时,它将获得以下输出:
Realforce is present
1
mac 3166798437680e8a22c7093bf294fbaf connecting connected app com.webos.app.hdmi3
2
Realforce is present
1
2
我不明白为什么LaunchDaemon无法运行节点脚本。对此有什么想法或经验吗
谢谢你
编辑1: 通过向plist添加以下键,我现在能够在节点中获得一个错误
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin/lgtvcontrol</string>
</dict>
路径
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin/lgtvcontrol
将节点错误日志输出到文件时,我在执行时得到以下结果:
internal/validators.js:113
throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
^
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined
at validateString (internal/validators.js:113:11)
at Object.join (path.js:1039:7)
at module.exports (/usr/local/bin/lgtvcontrol/node_modules/persist-path/index.js:9:27)
at new LGTV (/usr/local/bin/lgtvcontrol/index.js:48:16)
at LGTV (/usr/local/bin/lgtvcontrol/index.js:38:16)
at Object.<anonymous> (/usr/local/bin/lgtvcontrol/TVinputChange.js:7:33)
at Module._compile (internal/modules/cjs/loader.js:1121:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1160:10)
at Module.load (internal/modules/cjs/loader.js:976:32)
at Function.Module._load (internal/modules/cjs/loader.js:884:14) {
code: 'ERR_INVALID_ARG_TYPE'
}
internal/validators.js:113
抛出新错误\u无效的\u参数\u类型(名称,'string',值);
^
TypeError[ERR_INVALID_ARG_TYPE]:“path”参数必须是string类型。接收类型未定义
在validateString(internal/validators.js:113:11)
在Object.join(path.js:1039:7)
在module.exports(/usr/local/bin/lgtvcontrol/node_modules/persist path/index.js:9:27)
在新的LGTV(/usr/local/bin/lgtvcontrol/index.js:48:16)
在LGTV(/usr/local/bin/lgtvcontrol/index.js:38:16)
反对。(/usr/local/bin/lgtvcontrol/TVinputChange.js:7:33)
at模块编译(内部/modules/cjs/loader.js:1121:30)
在Object.Module._extensions..js(internal/modules/cjs/loader.js:1160:10)
在Module.load(内部/modules/cjs/loader.js:976:32)
at Function.Module._load(内部/modules/cjs/loader.js:884:14){
代码:“错误\无效\参数\类型”
}
路径/lgtvcontrol/TVinputChange.js
是否不同?脚本执行时的工作目录是什么?节点调用的退出代码是什么?斯特德有什么事吗?尝试在开始时添加set-e
,查看是否打印过2。为什么要使用echo$(node…
而不是直接运行node…
?请参阅。@cbr我尝试表达完整路径,结果相同-set-e
结果相同output@GordonDavisson没什么区别,我试着看看是否可以从节点中得到输出,但什么都没有显示