https://github.com/xan105/node-shell
Run external command or script
https://github.com/xan105/node-shell
child-process exec node shell
Last synced: 2 months ago
JSON representation
Run external command or script
- Host: GitHub
- URL: https://github.com/xan105/node-shell
- Owner: xan105
- License: mit
- Created: 2024-04-08T14:13:33.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-29T10:39:24.000Z (about 2 years ago)
- Last Synced: 2025-02-25T16:44:39.013Z (over 1 year ago)
- Topics: child-process, exec, node, shell
- Language: JavaScript
- Homepage:
- Size: 26.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
About
=====
Run external command or script.
📦 Scoped `@xan105` packages are for my own personal use but feel free to use them.
Example
=======
Run external command and display the output
```js
import { $ } from "@xan105/shell";
const stdout = await $("echo Hello World");
console.log(stdout);
```
Run pwsh cmdlet and parse the output
```js
import { $, pwsh } from "@xan105/shell";
const stdout = await $("Get-StartApps | Format-List");
const json = pwsh.parseList(stdout)
console.log(json);
```
Run external script
```js
import { $ } from "@xan105/shell";
await $("/path/to/script", { script: true });
```
Install
=======
```
npm install @xan105/shell
```
API
===
⚠️ This module is only available as an ECMAScript module (ESM).
## Named export
### `$(cmd: string, option?: object): Promise`
Run external command or script.
**⚙️ Options**
- `shell?: string` (powershell/sh)
Shell to send the command/script to.
- `script?: boolean` (false)
`cmd` is considered as the script's filePath when set to `true`.
- `cwd?: string` (current cwd)
Current working dir.
- `env?: { key: value, ... }` (system env)
Env. variable.
- `silent?: boolean` (false)
Silent fail on error (no throw) when set to `true`
- `escape?: boolean` (true)
When set to `true`, If the specified shell has an *escape char* different than `\`, escape it.
**Return**
✔️ Shell output *(stdout)*
❌ Rejects on error
## pwsh
### `parseList(stdout: string, option?: object): object[]`
Parse a PowerShell cmdlet list formated output into a JSON like object.
eg: `foo | Format-List` or `foo | fl`
⚙️ **Options**
- `translate?: boolean` (true)
Auto string convertion to boolean, number, etc.
Example:
```js
import { $ } from "@xan105/shell";
import { parseList } from "@xan105/shell/pwsh"
const stdout = await $("ls | Format-List");
const json = parseList(stdout)
console.log(json);
```
⚠️ **JSON compatibility**
Some integers will be represented as **BigInt** due to their size when using the translate option.
**BigInt is not a valid value in the JSON spec.**
As such when stringify-ing the returned object to JSON you'll need to handle the JSON stringify replacer function to prevent it to fail.
A common workaround is to represent them as a string:
```js
JSON.stringify(data, function(key, value) {
if(typeof value === "bigint")
return value.toString();
else
return value;
});
```