spawn-default-shell
Version:
Spawn shell command with platform default shell
62 lines (43 loc) • 2.49 kB
Markdown
> Spawn shell command with platform default shell
[](https://travis-ci.org/kimmobrunfeldt/spawn-default-shell) [](https://ci.appveyor.com/project/kimmobrunfeldt/spawn-default-shell) *master branch status*
[](https://www.npmjs.com/package/spawn-default-shell)
Like `child_process.spawn` with `shell: true` option but a bit more
convenient and customizable. You can just pass the command as a string,
and it will be executed in the platform default shell. Used in [concurrently](https://github.com/kimmobrunfeldt/concurrently).
```js
// If we are in Linux / Mac, this will work
const defaultShell = require('spawn-default-shell');
const child = defaultShell.spawn('cat src/index.js | grep function');
```
Platform | Command
---------|----------
Windows | `cmd.exe /c "..."`. If `COMSPEC` env variable is defined, it is used as shell path.
Mac | `/bin/bash -l -c "..."`
Linux | `/bin/sh -l -c "..."`
You can always override the shell path by defining these two environment variables:
* `SHELL=/bin/zsh`
* `SHELL_EXECUTE_FLAGS=-l -c` **Warning: execute flag must be the last flag.**
All `sh` variants will be called with `-l` flag (--login). It invokes the shell
as a non-interactive login shell. In bash it means:
> When bash is invoked as an interactive login shell, or as a non-inter-
> active shell with the --login option, it first reads and executes commands
> from the file /etc/profile, if that file exists. After reading
> that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
> in that order, and reads and executes commands from the first one that
> exists and is readable. The --noprofile option may be used when the
> shell is started to inhibit this behavior.
>
> When a login shell exits, bash reads and executes commands from the
> file ~/.bash_logout, if it exists.
```bash
npm install spawn-default-shell --save
```
Spawns a new process of the platform default shell using the given command.
For all options, see [child_process](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options)
documentation.
MIT