Bash

如何將文本發送到命令然後從終端讀取

  • February 16, 2013

我想知道是否可以將一些發送到命令的標準輸入,然後繼續從終端讀取。

我要解決的問題是每次打開 Node.js REPL 時都會執行一些初始化程式碼,所以我從一開始就在 REPL 上提供了一些功能。基本上,要自動執行此操作:

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

我現在可以在這裡使用字元串將一些文本發送到命令的標準輸入:

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

這將執行我的初始化程式碼,但之後也會立即關閉 REPL。

對於 Node.js 的這個特殊問題,也許還有另一種解決方案,但我想知道是否有一種通用方法可以混合來自字元串或文件的輸入,然後繼續從終端讀取。

更新Chris Down 的解決方案有效,但預設情況下 Node.js REPL 不會在互動模式下執行(這是預期的,因為我們不是從終端讀取)。幸運的是,有一個-i選項可以在 Node.js 終端中強制使用互動模式:

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

請注意,在接受不是來自終端的輸入時,您的 REPL 環境可能會有不同的行為(例如,可能不會出現提示)。

您可以使用rlwrapreadline庫的包裝器)與互動功能不適合您的程序進行互動。

rlwrap node

Rlwrap 無法將初始輸入發送到命令,但它很接近:您可以將一些初始內容放入輸入緩衝區,這樣您只需按Enter.

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

(設置NODE_NO_READLINE告訴node不要使用其內置的 readline 支持。)

引用自:https://unix.stackexchange.com/questions/64841