如何在shell中执行Javascript

时间:2017-02-06 08:05:21

标签: shell

JS:

#!/usr/bin/env node
const util = require("util"),
    inquirer = require("inquirer")
function promptUser() {
    inquirer.prompt([
        {
            type: "list",
            name: "scheme",
            message: "How would you like to build",
            choices: [
                {
                    name: "build develop",
                    value: "develop"
                }, {
                    name: "build product",
                    value: "product"
                }
            ]
        }
    ], earlyAnswers => {
        console.log(earlyAnswers.scheme);
    });
}
promptUser();

它会问一个问题,我可以选择答案,记录答案,如:

enter image description here enter image description here

我想在shell中执行这个js:

#!/bin/sh
echo 123
a=`node ./test2.js`

让a =回答,但不能执行:

enter image description here

我该如何执行这个JS?

1 个答案:

答案 0 :(得分:1)

您的javascript实际上正在运行,但是您在命令中的反对

a=`node ./test2.js`

使shell捕获标准输出并将其分配给变量a。捕获所有stdout,而不仅仅是最后一行,因此不会向用户显示任何内容。

解决此问题的一种可能方法是使用node.js进程的退出代码。 这是一个通用脚本,它将接受命令行上的选项提示,并将其退出代码设置为选择的从零开始的索引。

#! /usr/bin/env node --harmony_destructuring
util = require("util");
inquirer = require("inquirer");

var [program, file, textprompt, ...args] = process.argv

var choices = [];
args.forEach(function(E) {
    var [name, value] = E.split(":",2);
    choices.push({name: name, value: value});
});

function promptUser() {
    inquirer.prompt([
        {
            type: "list",
            name: "scheme",
            message: textprompt,
            choices: choices
        }
    ]).then(function(answer) {
        if (answer && answer.scheme) {
            position = choices.findIndex(function(E) { return E.value == answer.scheme; });
            process.exit(position);
        } else {
            process.exit(-1);
        }
    })
}
if (choices.length > 0)
    promptUser();

可以这样使用:

#! /bin/bash
./test2.js "How would you like to build?" "build develop:develop" "build product:product"
selected=$?
case $selected in
    0) echo "Selected develop";; 
    1) echo "Selected product";;
    *) echo "Invalid selection";;
esac