如何将文本发送到命令,然后从终端读取

如何将文本发送到命令,然后从终端读取

我想知道是否可以将一些内容发送到命令的标准输入,然后继续从终端读取。

我试图解决的问题是每次打开 Node.js REPL 时执行一些初始化代码,因此我从一开始就可以在 REPL 上使用一些函数。基本上,要自动化此操作:

$ node
> require('./myutils')
> ... continue using the REPL

我现在可以使用这里的字符串将一些文本发送到命令的标准输入:

$ node <<<"require('./myutils')"

这将执行我的初始化代码,但之后也会立即关闭 REPL。

也许 Node.js 对于这个特定问题有另一种解决方案,但我想知道是否有一种通用方法来混合来自字符串或文件的输入,然后继续从终端读取。

更新:克里斯·唐的解决方案工作,但 Node.js REPL 默认情况下不会在交互模式下运行(这是预期的,因为我们不是从终端读取)。幸运的是, -iNode.js 终端中有一个强制交互模式的选项:

{ echo "require('./myutils')" ; cat ; } | node -i

答案1

{ echo "require('./myutils')" ; cat ; } | node

请注意,当获取非来自终端的输入时,您的 REPL 环境可能会表现不同(例如,可能不会出现提示)。

答案2

您可以使用回卷(包装为阅读线库)来与交互功能不适合您的程序进行交互。

rlwrap node

Rlwrap 无法将初始输入发送到命令,但它很接近:您可以将一些初始内容放入输入缓冲区中,这样您只需按Enter

NODE_NO_READLINE=1 rlwrap -P"require('./myutils')" node

(设置NODE_NO_READLINE告诉node不要使用其内置的 readline 支持。)

相关内容