@yarnpkg/shell
A JavaScript implementation of a bash-like shell (we use it in Yarn 2 to provide cross-platform scripting). This package exposes an API that abstracts both the parser and the interpreter; should you only need the parser you can check out @yarnpkg/parsers
, but you probably won't need it.
Usage
import {execute} from '@yarnpkg/shell';
process.exitCode = await execute(`ls "$0" | wc -l`, [process.cwd()]);
Features
- Typechecked
- Portable across systems
- Supports custom JS builtins
- Supports pipes
- Supports glob patterns (only for files that exist on the filesystem:
ls *.txt
) - Supports logical operators
- Supports subshells
- Supports variables
- Supports string manipulators
- Supports argc/argv
- Supports background jobs with color-coded output
- Supports the most classic builtins
- Doesn't necessarily need to access the fs
Help Wanted
- Full glob support (
mv build/{index.js,index.build.js}
,echo {foo,bar}
,FOO=a,b echo {$FOO,x}
) - More string manipulators
Non-Goals
- Perfect POSIX compliance (basic scripting is enough for now)
- Multiline scripts (we mostly target one-liners)
- Control structures (same reason)
Index
Classes
Functions
Namespaces
Type Aliases
Functions
execute
Parameters
command: string
args: string[] = []
__namedParameters: Partial<UserOptions> = {}
Returns Promise<number>
Type Aliases
Glob
ShellBuiltin
Type declaration
Parameters
args: string[]
opts: ShellOptions
state: ShellState
Returns Promise<number>
ShellOptions
Type declaration
args: string[]
baseFs: FakeFS<PortablePath>
builtins: Map<string, ShellBuiltin>
glob: globUtils.Glob
initialStderr: Writable
initialStdin: Readable
initialStdout: Writable
ShellState
Type declaration
backgroundJobs: Promise<unknown>[]
cwd: PortablePath
environment: {}
[key string]: string
exitCode: number | null
nextBackgroundJobIndex: number
procedures: {}
[key string]: ProcessImplementation
stderr: Writable
stdin: Readable
stdout: Writable
variables: {}
[key string]: string
UserOptions
Type declaration
baseFs: FakeFS<PortablePath>
builtins: {}
[key string]: ShellBuiltin
cwd: PortablePath
env: {}
[key string]: string | undefined
glob: globUtils.Glob
stderr: Writable
stdin: Readable | null
stdout: Writable
variables: {}
[key string]: string