Macos 创建+;执行虚拟bash脚本

Macos 创建+;执行虚拟bash脚本,macos,bash,unix,Macos,Bash,Unix,有没有办法创建和执行虚拟bash脚本,而不是将脚本写入文件系统,然后使用bash执行.sh文件 我正在使用Node.js,可能有一些库用于构造和执行bash脚本;我想我想知道,如果不将文件保存在某个地方,如何做到这一点。可以这样做: echo 'echo hi' | bash 实际上相当方便,因为您不需要将文件写入文件系统;无需创建.sh文件并运行它,然后在运行后删除该文件 要与Node.js一起使用,您可以这样运行它: const cp = require('child_process')

有没有办法创建和执行虚拟bash脚本,而不是将脚本写入文件系统,然后使用
bash
执行.sh文件


我正在使用Node.js,可能有一些库用于构造和执行bash脚本;我想我想知道,如果不将文件保存在某个地方,如何做到这一点。

可以这样做:

echo 'echo hi' | bash
实际上相当方便,因为您不需要将文件写入文件系统;无需创建.sh文件并运行它,然后在运行后删除该文件

要与Node.js一起使用,您可以这样运行它:

 const cp = require('child_process');

 const bashCmd  = 'echo "echo hello world" | bash';

 cp.exec(bashCmd, function (err, stdout, stderr) {

        if (err) {
            console.error(err.stack);
        }

        console.log(stdout);
        console.error(stderr);

        process.exit(0);


    });
目前,我正在使用它为我们的测试生成伊斯坦布尔覆盖率报告。以下代码:

   var bash = 'echo "';

    const $files = sumanUtils.removeSharedRootPath(files);

    $files.forEach(function (file) {

        bash += 'istanbul cover ' + file[0] + ' --dir ./coverage/' + String(file[1]).replace(/\//g,'-') + '\n';

    });

    bash += 'istanbul report" | bash';

    console.log(bash);


    cp.exec(bash, function (err, stdout, stderr) {

        if (err) {
            console.error(err.stack);
            process.exit(1);
        }

        console.log(stdout);
        console.error(stderr);

        process.exit(0);


    });
生成如下所示的bash命令:

echo "istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/empty.js --dir ./coverage/empty.js
istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/test6.js --dir ./coverage/test6.js
istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/test7-start.js --dir ./coverage/test7-start.js
istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/test8.js --dir ./coverage/test8.js
istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/test9.js --dir ./coverage/test9.js
istanbul report" | bash

这是一个非常有趣的问题,但我想这很难做到。您还打算使用/bin/bash作为解释器吗?是的,我将使用bash来运行脚本。我之所以问这个问题,是因为这只是一个临时文件,会被覆盖,因为内容是动态的,基本上是一系列连续的任务。因此,如果我可以避免文件混乱,那么就没有必要将文件保存到文件系统中。添加了一个答案,如果您认为它正常,请告诉我为什么不尝试一下?将未经测试的猜测作为答案是没有帮助的。这很好,而且看起来比我预期的容易。但是您能从Node.js获取输出并将其连接到bash的stdin吗?你能让Node.js生成回声hi吗?是的,你能,你会发布完整的答案,你使用child_process.exec。我对落选的选票有点困惑。另外,我想知道你是否可以使用“sudobash‘你的shell命令在这里’”