bash:terminal:找不到命令

时间:2016-01-06 20:58:32

标签: linux node.js macos bash shell

我正在尝试编写一个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

3 个答案:

答案 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文件,我不知道该怎么做