我正在尝试编写一个Node.js脚本,该脚本将在新的命令窗口中以新进程启动Node.js服务器。
我相信我很亲近。我有这个:
var n = cp.spawn('sh', [ 'start-server.sh' ]);
start-server.sh的内容就像这样
#!/usr/bin/env bash
node bin/www
这会成功启动服务器,但它不会打开一个新的终端窗口,所以我看不到任何生成进程的stdio。
所以我想我应该在bash脚本中打开一个新的终端窗口,然后运行node命令,这样bash脚本的内容就会变成
#!/usr/bin/env bash
terminal -e "node bin/www"
问题是在命令行中无法识别“终端”。这是为什么?我相信“终端”命令应该默认为用作默认终端应用程序的任何程序。
请告知这是否是执行此操作的最佳方式以及为什么OSX中的命令行可能无法识别“终端”,谢谢!
这就是我的道路
echo $PATH
/Users/amills001c/.rvm/gems/ruby-2.2.1/bin:/Users/amills001c/.rvm/gems/ruby-2.2.1@global/bin:/Users/amills001c/.rvm/rubies /ruby-2.2.1/bin:/Users/amills001c/google_app_engine_stuff/google-cloud-sdk/bin:/usr/local/bin:/usr/local/bin/meteor:/usr/local/redis/bin:/ USR /斌:/ bin中:/ usr / sbin目录:/ sbin目录:在/ usr / local / bin目录:在/ usr /本地/ git的/ bin中:/用户/ amills001c / golang /斌:/Users/amills001c/apache-maven-3.3 0.3 / bin中:/Users/amills001c/.rvm/bin
答案 0 :(得分:4)
在OS X中,您通常会运行命令:
-keep class !android.support.v7.view.menu.**,android.support.** {*;}
这会打开一个新的终端窗口并执行你的脚本。
答案 1 :(得分:3)
检查系统中“terminal”命令的真实名称,检查一下,例如,在Ubuntu中执行“/ usr / bin / env | grep terminal”,在我的例子中是“gnome-terminal”,然后使用“gnome-terminal -e XXX”应该可行。希望它有助于J。
答案 2 :(得分:0)
对我有用的是:
var cp = require('child_process');
cp.spawn('sh', [ 'start-server.sh' ], {
detached: true,
env: {
NODE_ENV: process.env.NODE_ENV
}
});
#!/usr/bin/env bash (start-server.sh)
open "./run-node.sh"
#!/usr/bin/env bash (run-node.sh)
node ./bin/www.js
open
命令将使用默认应用程序打开.sh文件,对我来说恰好是iterm2,而不是terminal.app
我遇到的下一个问题是我必须将路径作为参数传递给.sh文件,我不知道该怎么做