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();
它会问一个问题,我可以选择答案,记录答案,如:
我想在shell中执行这个js:
#!/bin/sh
echo 123
a=`node ./test2.js`
让a =回答,但不能执行:
我该如何执行这个JS?
答案 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