rannn505 / child-shell

Node.js bindings 🔗 for shell
http://rannn505.github.io/child-shell/
MIT License
301 stars 71 forks source link

How to use Child-Shell #153

Open ribalraza009 opened 2 years ago

rtarnaud commented 1 year ago

Here is a working example of how you can use node-powershell or child-shell:

import { exit } from 'node:process';
import { PowerShell } from 'node-powershell';

(async () => {
    try {
        const output = await PowerShell.$$`echo "hello from PowerShell"`({
            executableOptions: {
                '-ExecutionPolicy': 'Bypass',
                '-NoProfile': true,
            },
        });
        if (!output.hadErrors) {
            console.log(output.stdout.toString());
        }
        else {
            console.error(output.stderr.toString());
        }
    }
    catch (error) {
        console.error(error);

        exit(1);
    }

    exit(0);
})();
eugeneniemand commented 1 year ago

I'm trying this but my stdout is undefined however the debug is showing output and there are no errors.

let result = await ps.invoke(command)
        if (!result.hadErrors) {
            console.log(result.stdout?.toString())
        }
rtarnaud commented 1 year ago

That is the syntax of the previous major version. The current one has changed a lot and there's hardly any info about it in the readme, hence the title of the issue and my answer.

eugeneniemand commented 1 year ago

I'm trying the following

const result = await Bash.$$`echo "hello from Bash"`({
        debug: true,
        invocationTimeout: 1000,
        disposeTimeout: 3000,
        throwOnInvocationError: false,
      });

    if (!result.hadErrors) {
        console.log(result?.stdout?.toString());
    }
    else {
        console.error(result?.stderr?.toString());
    }

and get this output

2023-03-02T16:28:35.173Z BASH:15484: # shell process started: "bash -s"
2023-03-02T16:28:35.176Z BASH:15484: # starting command invocation
2023-03-02T16:28:35.179Z BASH:15484: $ echo "hello from Bash"
2023-03-02T16:28:35.313Z BASH:15484: > N8yLS6keUkmuJ97u
2023-03-02T16:28:35.317Z BASH:15484: > N8yLS6keUkmuJ97u
2023-03-02T16:28:36.188Z BASH:15484: # command invocation timed out
2023-03-02T16:28:36.193Z BASH:15484: # shell process exited

This sort of works, except for the random strings (N8yLS6keUkmuJ97u) in the output, however when I try run docker --version I expect something like Docker version 20.10.14, build a224086 but I get this instead

2023-03-02T16:31:14.227Z BASH:11392: $ docker --version
2023-03-02T16:31:14.836Z BASH:11392: > 1IehtkaxTGUyKkf7
2023-03-02T16:31:14.838Z BASH:11392: > 1IehtkaxTGUyKkf7
unknown flag: --version
See 'docker --help'.

Usage:  docker [OPTIONS] COMMAND

and lastly when I run docker pull structurizr/lite I get this strange error invalid reference format

2023-03-02T16:33:39.272Z BASH:8720: $ docker pull structurizr/lite
2023-03-02T16:33:39.738Z BASH:8720: > S1jqaUKDPJgXOOAV
2023-03-02T16:33:39.740Z BASH:8720: > S1jqaUKDPJgXOOAV
invalid reference format

All these commands work in a normal Bash and Powershell shell so not entirely sure whats happening here