首页 > 解决方案 > 尝试使用 sudo -S 运行带有 node.js 的 shell 脚本

问题描述

我正在尝试运行具有 sudo 访问权限的 shell 脚本,该脚本在 Mac 上使用 Node.js 执行 python 脚本。这是一个很大的帮助如何使用 nodejs 运行 shell 脚本文件?但我被卡住了:

外壳脚本:

#!/bin/sh
sudo -S python [pathToPythonScript]/someScripts.py

Node.js 代码:

const shell = require('shelljs');
shell.exec("./[pathToShellScript]");

当我在 WebStorm 中运行它时,系统会提示我输入密码。我这样做了,但什么也没发生;脚本未执行。有人可以帮我吗?

标签: node.jsshellwebstorm

解决方案


问题似乎是您没有以 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提供,因此不会打开交互式提示)。


推荐阅读