Is there a way to launch a terminal window (or cmd on Windows) and pass/run a command?

前端 未结 2 962
清酒与你
清酒与你 2021-02-10 13:36

Question

Is it possible to do the following?

  • open a new cmd.exe or terminal (on MacOS / Linux) window

  • pass /

相关标签:
2条回答
  • 2021-02-10 14:05

    Here is a working example showing how to open a Terminal window at a specific path (~/Desktop for instance) on macOS, from a renderer script:

    const { app } = require ('electron').remote;
    const atPath = app.getPath ('desktop');
    const { spawn } = require ('child_process');
    let openTerminalAtPath = spawn ('open', [ '-a', 'Terminal', atPath ]);
    openTerminalAtPath.on ('error', (err) => { console.log (err); });
    

    It should be easy to adapt it to any selected atPath... As for running other commands, I haven't found a way yet...

    And here is the equivalent working code for Linux Mint Cinnamon or Ubuntu:

    const { app } = require ('electron').remote;
    const terminal = 'gnome-terminal';
    const atPath = app.getPath ('desktop');
    const { spawn } = require ('child_process');
    let openTerminalAtPath = spawn (terminal, { cwd: atPath });
    openTerminalAtPath.on ('error', (err) => { console.log (err); });
    

    Please note that the name of the terminal application may be different, depending on the Linux flavor (for instance 'mate-terminal' on Linux Mint MATE), and also that the full path to the application can be explicitly defined, to be on the safe side:

    const terminal = '/usr/bin/gnome-terminal';
    

    HTH...

    0 讨论(0)
  • 2021-02-10 14:05

    Solution

    I finally found a way to do it on Windows:

    var child_process = require('child_process');
    child_process.exec("start cmd.exe /K cd /D C:/test");
    

    Notes

    • You have to add the word start to open a new command window

    • Instead of cd /D C:/test you can specify any other command, e.g. python

    • /D is to make sure it will change the current drive automatically, depending on the path specified

    • /K removes the initial message

    • Don't use execSync it will lock the app until the terminal (command prompt) window is closed

    As for MacOS, looks like it's possible to do with osascript

    osascript -e 'tell application "Terminal" to activate' -e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down'

    0 讨论(0)
提交回复
热议问题