sudo 即时
[注] 这是叉子在
expo/sude-prompt来解决已贬值的节点API. 上游:
使用非图形终端命令运行 sudo,必要时会用图形 OS 对话框提醒用户。 可用于背景 Node.js 应用程序或需要的本地 Electron apps sudo。 。 。 .
横线
sudo-prompt 提供本地 OS 对话框提示 马科斯, (中文(简体) ), 链接 财务报告和审定财务报表 窗口。 。 。 .



安装
sudo-prompt 不存在外部依赖性,也不要求任何本地约束.
npm install sudo-prompt
使用量
注意: 您的命令不应该从 sudo 前缀.
var sudo = require('sudo-prompt');
var options = {
name: 'Electron',
icns: '/Applications/Electron.app/Contents/Resources/Electron.icns', // (optional)
};
sudo.exec('echo hello', options,
function(error, stdout, stderr) {
if (error) throw error;
console.log('stdout: ' + stdout);
}
);
sudo-prompt 将使用 process.title 作为 options.name 若为 options.name 未提供. options.name 必须是只有字母数字(支持空间),最多70个字符.
sudo-prompt 将在所有平台上保存当前工作目录。 环境变量可以明确使用 options.env。 。 。 .
sudo-prompt.exec() 与 child-process.exec() (由于平台和权限的限制).
行为
在macOS上, sudo-prompt 应该像 sudo 在壳中命令。 如果你的命令不工作 sudo 命令在 shell 中(可能因为它使用) > 重定向到一个受限制文件,然后它可能无法工作 sudo-prompt然而,仍然可以使用sudo-prompt来获得特权外壳, 欲了解更多信息,请参见此结出的问题。 。 。 .
在Linux上, sudo-prompt 将使用其中之一 pkexec 或者说 kdesudo 以显示密码提示并运行命令。 在可能的情况下, sudo-prompt 会尝试让这些模仿 sudo。根据使用哪一个二进制,并由于一些二进制的限制,您程序的名称或命令本身可以显示给您的用户. sudo-prompt 将不使用 gksudo 自此以来 gksudo 不支持同时提示。 通过 options.icns 当前不支持 sudo-prompt 在 Linux 上。 欢迎补丁添加基于 polkit。 。 。 .
在视窗上, sudo-prompt 将使用用户账户控制来提升命令。 通过 options.name 或者说 options.icns 当前不支持 sudo-prompt 在视窗上.
仅限非图形终端命令
就像你不应该使用 sudo 要启动任何图形化应用程序,你永远不要使用 sudo-prompt 以启动任何图形应用程序。 这样做会使您家目录中的文件成为root所拥有 . sudo-prompt 被明确设计为发射非图形终端命令. 有关更多信息, 读取此文章。 。 。 .
货币
关于用户选择拥有的系统 tty-tickets 启用(大多数系统),每次调用 exec() 将生成单独的密码提示。 何处 tty-tickets 已禁用,随后呼叫 exec() 即使用户的密码 sudo 时间戳文件仍然有效,因为边缘大小写 sudo 本身, 详情见此讨论。 。 。 .
你不应该依赖 sudo-prompt 执行您的电话顺序。 如果您需要执行电话命令, 您应该在申请中明确命令您的电话。 如果命令是短命的,你应该总是排队打给 exec() ,以确保您的用户没有过载密码提示.
取消时间戳
在 macOS 和 Linux 上,您可以取消用户的 sudo 通过运行您的终端中的以下命令来强制提示显示时间戳文件 :
$ sudo -k