我正在尝试通过sudo访问来运行Shell脚本,该脚本在Mac上使用Node.js执行python脚本。这是一个很大的帮助How to run shell script file using nodejs?,但我被卡住了:
Shell脚本:
#!/bin/sh
sudo -S python [pathToPythonScript]/someScripts.py
Node.js代码:
const shell = require('shelljs');
shell.exec("./[pathToShellScript]");
当我在WebStorm中运行此密码时,系统会提示我输入密码。我这样做了,但是什么也没发生。该脚本未执行。有人可以帮我吗?
问题似乎是您没有以root权限执行节点脚本:sudo node filename.js
。
此外,可能是您使用shelljs模块生成的子进程未继承父节点进程的有效UID。如果sudo node filename.js
无法解决您的问题,我建议您使用execa
软件包而不是shelljs
来更好地调试和检测生成的子进程:https://www.npmjs.com/package/execa
您可以定义子进程的uid
,gid
以及stdin流,可以将其设置为ignore
,这样就不会出现交互式提示(sudo命令将识别出没有stdin
提供,因此无法打开交互式提示。)