【问题标题】:Send a string and Enter key to a Node.js script from command line从命令行向 Node.js 脚本发送字符串和 Enter 键
【发布时间】:2020-11-16 17:39:47
【问题描述】:

我正在 Linux 中运行一个 Node.js 脚本,它会提示(通过lib)用户输入代码。我得到脚本的进程ID:

pgrep -f test.js 

然后通过新行将代码传递给它以模拟 Enter 键:

echo -e "1234\n" > /proc/88888/fd/0

代码1234 被通过,也添加了一个新行,但它没有触发 Enter 键并且脚本没有继续。但是,当我在 shell 中手动按 Enter 键时,脚本会识别 Enter 键。所以问题是如何可靠地将 Enter 键发送到另一个进程/脚本?

下面是test.js脚本的代码:

inquirer = require('inquirer');

async function plztest() {

let { code } = await inquirer.prompt([
    {
        type: 'input',
        name: 'code',
        message: 'Enter code',
    },
]);
console.log(code);
process.exit();
};
      
plztest();

【问题讨论】:

  • 你能分享你提供数据的文件吗?以便可以测试任何可能的解决方案?
  • 添加了 test.js 代码

标签: node.js bash command-line process inquirerjs


【解决方案1】:

感谢您提供 javascript 文件的代码 sn-p,我有相同的解决方案。

问题

是你对管道和重定向的使用有点困惑。

  • 管道 | 用于将输出传递给另一个程序或实用程序。
  • 重定向 > 用于将输出传递到文件或流。

关于管道和重定向的更详细的答案is given here

解决方案

既然现在我们知道我们需要在这里使用管道,这样的事情就可以解决问题。

echo -e "1234" | /proc/88888/fd/0

测试

我运行了您在问题中提供的脚本,以下是输出屏幕截图。

【讨论】:

  • 回显 "123" | node app.js 当然可以。但是我的用例需要echo -e "1234" | /proc/88888/fd/0,这样做会给我 Permission Denied 错误。
  • 但是,echo -e "1234" | tee /proc/88888/fd/0 工作,但脚本仍然无法识别 Enter 命令,因此无法继续。
猜你喜欢
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多