DOC: `input` option in `child_process.spawnSync` require `stdio[0]` to be `pipe`
Affected URL(s)
https://nodejs.org/api/child_process.html#child_processspawnsynccommand-args-options
Description of the problem
to use the input option in child_process.spawnSync also need the stdio[0] option to be set as 'pipe'
current doc (v20.5.1) specifies:
input <...> The value which will be passed as stdin to the spawned process. Supplying this value will override
stdio[0].
the actual behavior is more like:
Supplying this value will need
stdio[0]to be'pipe'to be overridden.
test done on Linux, and Win+GitBash with node v18.14.0 and v20.2.0
baseline test command:
echo "text file content" > test.txt echo "cli content" | cat - test.txt # will output # > cli content # > text file content
with nodejs input with default stdio ('pipe') works:
echo "text file content" > test.txt node -p "String(child_process.spawnSync('cat', [ '-', 'test.txt' ], { input: 'cli content\n' }).stdout)" # will output # > cli content # > text file content
but setting stdio[0] to 'ignore' or 'inherit'
will actually override input option
node -p "String(child_process.spawnSync('cat', [ '-', 'test.txt' ], { input: 'cli content\n', stdio: [ 'ignore' ] }).stdout)" # will only output # > text file content node -p "String(child_process.spawnSync('cat', [ '-', 'test.txt' ], { input: 'cli content\n', stdio: [ 'inherit' ] }).stdout)" # will wait for user input, use "Ctrl+D" to end input and see partial output
other execFileSync and execSync in synchronous-process-creation also have similar behavior:
# work node -p "String(child_process.execFileSync('/usr/bin/cat', [ '-', 'test.txt' ], { input: 'cli content\n' }))" # not work node -p "String(child_process.execFileSync('/usr/bin/cat', [ '-', 'test.txt' ], { input: 'cli content\n', stdio: [ 'ignore' ] }))" node -p "String(child_process.execFileSync('/usr/bin/cat', [ '-', 'test.txt' ], { input: 'cli content\n', stdio: [ 'inherit' ] }))" # work node -p "String(child_process.execSync('cat - test.txt', { input: 'cli content\n' }))" # not work node -p "String(child_process.execSync('cat - test.txt', { input: 'cli content\n', stdio: [ 'ignore' ] }))" node -p "String(child_process.execSync('cat - test.txt', { input: 'cli content\n', stdio: [ 'inherit' ] }))"