# sudo-prompt-alt

> Run a command using sudo, prompting the user with an OS dialog if necessary

Latest version **9.3.0** (published 2022-05-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install sudo-prompt-alt
pnpm add sudo-prompt-alt
yarn add sudo-prompt-alt
bun add sudo-prompt-alt
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 9.3.0 |
| Published | 2022-05-17 |
| First published | 2022-02-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 43.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4 |
| Maintainers | xudafeng, zlyi |
| Keywords | sudo, os, dialog, prompt, command, exec, user access control, UAC, privileges, administrative, elevate, run as administrator |

## Links

- npm: https://www.npmjs.com/package/sudo-prompt-alt
- Repository: https://github.com/electron-modules/sudo-prompt-alt
- Homepage: https://github.com/electron-modules/sudo-prompt-alt#readme
- Issues: https://github.com/electron-modules/sudo-prompt-alt/issues
- npm.io page: https://npm.io/package/sudo-prompt-alt

## Alternatives

- [angular-pipes](https://npm.io/package/angular-pipes.md) — 5.6K weekly downloads
- [@ng-web-apis/midi](https://npm.io/package/@ng-web-apis/midi.md) — 2.6K weekly downloads
- [happn-3](https://npm.io/package/happn-3.md) — 1.6K weekly downloads
- [@opensip-cli/lang-go](https://npm.io/package/@opensip-cli/lang-go.md) — 1.2K weekly downloads
- [mongoose-typescript](https://npm.io/package/mongoose-typescript.md) — 85 weekly downloads

## Recent versions

- 9.3.0 (latest) — 2022-05-17
- 9.2.1 — 2022-02-17

## README

# sudo-prompt

---

[![electron modules][electron-modules-image]][electron-modules-url]
[![NPM version][npm-image]][npm-url]
[![build status][build-image]][build-url]
[![node version][node-image]][node-url]
[![npm download][download-image]][download-url]

[electron-modules-image]: https://img.shields.io/badge/electron-modules-blue.svg
[electron-modules-url]: https://github.com/electron-modules/electron-modules
[npm-image]: https://img.shields.io/npm/v/sudo-prompt-alt.svg
[npm-url]: https://npmjs.org/package/sudo-prompt-alt
[build-image]: https://img.shields.io/appveyor/build/electron-modules/sudo-prompt-alt.svg?logo=appveyor
[build-url]: https://ci.appveyor.com/project/electron-modules/sudo-prompt-alt
[node-image]: https://img.shields.io/badge/node.js-%3E=_12-green.svg
[node-url]: http://nodejs.org/download/
[download-image]: https://img.shields.io/npm/dm/sudo-prompt-alt.svg
[download-url]: https://npmjs.org/package/sudo-prompt-alt

Run a non-graphical terminal command using `sudo`, prompting the user with a graphical OS dialog if necessary. Useful for background Node.js applications or native Electron apps that need `sudo`.

## Cross-Platform

`sudo-prompt` provides a native OS dialog prompt on **macOS**, **Linux** and **Windows**.

![macOS](https://raw.githubusercontent.com/jorangreef/sudo-prompt/master/macos.png)

![Linux](https://raw.githubusercontent.com/jorangreef/sudo-prompt/master/linux.png)

![Windows](https://raw.githubusercontent.com/jorangreef/sudo-prompt/master/windows.png)

## Installation

`sudo-prompt` has no external dependencies and does not require any native bindings.
```
npm install sudo-prompt
```

## Usage

Note: Your command should not start with the `sudo` prefix.

```javascript
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` will use `process.title` as `options.name` if `options.name` is not provided. `options.name` must be alphanumeric only (spaces are supported) and at most 70 characters.

`sudo-prompt` will preserve the current working directory on all platforms. Environment variables can be set explicitly using `options.env`.

**`sudo-prompt.exec()` is different to `child-process.exec()` in that no child process is returned (due to platform and permissions constraints).**

## Behavior

On macOS, `sudo-prompt` should behave just like the `sudo` command in the shell. If your command does not work with the `sudo` command in the shell (perhaps because it uses `>` redirection to a restricted file), then it may not work with `sudo-prompt`. However, it is still possible to use sudo-prompt to get a privileged shell, [see this closed issue for more information](https://github.com/jorangreef/sudo-prompt/issues/1).

On Linux, `sudo-prompt` will use either `pkexec` or `kdesudo` to show the password prompt and run your command. Where possible, `sudo-prompt` will try and get these to mimic `sudo`. Depending on which binary is used, and due to the limitations of some binaries, the name of your program or the command itself may be displayed to your user. `sudo-prompt` will not use `gksudo` since `gksudo` does not support concurrent prompts. Passing `options.icns` is currently not supported by `sudo-prompt` on Linux. Patches are welcome to add support for icons based on `polkit`.

On Windows, `sudo-prompt` will elevate your command using User Account Control (UAC). Passing `options.name` or `options.icns` is currently not supported by `sudo-prompt` on Windows.

## Non-graphical terminal commands only

Just as you should never use `sudo` to launch any graphical applications, you should never use `sudo-prompt` to launch any graphical applications. Doing so could cause files in your home directory to become owned by root. `sudo-prompt` is explicitly designed to launch non-graphical terminal commands. For more information, [read this post](http://www.psychocats.net/ubuntu/graphicalsudo).

## Concurrency

On systems where the user has opted to have `tty-tickets` enabled (most systems), each call to `exec()` will result in a separate password prompt. Where `tty-tickets` are disabled, subsequent calls to `exec()` will still require a password prompt, even where the user's `sudo` timestamp file remains valid, due to edge cases with `sudo` itself, [see this discussion for more information](https://github.com/jorangreef/sudo-prompt/pull/76).

You should never rely on `sudo-prompt` to execute your calls in order. If you need to enforce ordering of calls, then you should explicitly order your calls in your application. Where your commands are short-lived, you should always queue your calls to `exec()` to make sure your user is not overloaded with password prompts.

## Invalidating the timestamp

On macOS and Linux, you can invalidate the user's `sudo` timestamp file to force the prompt to appear by running the following command in your terminal:

```sh
$ sudo -k
```

## About

This is from the source code repository https://github.com/jorangreef/sudo-prompt, We will continue to maintain and improve features and stability.

---
_Source: https://npm.io/package/sudo-prompt-alt · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
