Bash
如何將文本發送到命令然後從終端讀取
我想知道是否可以將一些發送到命令的標準輸入,然後繼續從終端讀取。
我要解決的問題是每次打開 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 環境可能會有不同的行為(例如,可能不會出現提示)。
您可以使用rlwrap(readline庫的包裝器)與互動功能不適合您的程序進行互動。
rlwrap node
Rlwrap 無法將初始輸入發送到命令,但它很接近:您可以將一些初始內容放入輸入緩衝區,這樣您只需按
Enter
.NODE_NO_READLINE=1 rlwrap -P"require('./myutils')" node
(設置
NODE_NO_READLINE
告訴node
不要使用其內置的 readline 支持。)