2016-01-06 129 views
0

我正在尝试编写一个Node.js脚本,它将在新的命令窗口中的新进程中启动Node.js服务器。bash:terminal:command not found

我相信我很接近。我有这样的:

var n = cp.spawn('sh', [ 'start-server.sh' ]); 

内容start-server.sh的是,像这样

#!/usr/bin/env bash 
node bin/www 

这个成功启动服务器,但它不会打开一个新的终端窗口,这样我就可以”没有看到任何产生进程的stdio。

所以我想我应该在bash脚本打开一个新的终端窗口,然后运行该节点的命令,所以后来的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- [email protected]/bin:/Users/amills001c/.rvm/rubies/ruby-2.2.1/bin:/用户/ amills001c/google_app_engine_stuff /谷歌云SDK /斌:在/ usr/local/bin目录:在/ usr/local/bin目录/流星:在/ usr /本地/ Redis的/ bin中:在/ usr/bin中:/ bin中:/ usr/sbin目录:/ sbin目录:在/ usr/local/bin目录:在/ usr /本地/ git的/ bin中:/用户/amills001c/golang/bin:/Users/amills001c/apache-maven-3.3.3/bin:/Users/amills001c/.rvm/bin

+0

你为什么认为终端应该运行默认终端?它在其他任何环境中都有效吗? –

+0

也许我很迷惑Windows和OSX,但那是我的印象。但是现在,“终端”在命令行中无法识别。我只想打开任何终端窗口,不管它是OSX上的默认bash终端还是我的Mac上的应用程序/实用程序中的iterm2/iterm3 –

+0

,我有terminal.app,我想我可以运行该 –

回答

3

检查系统中“终端”命令的真实名称,以检查它,例如,在Ubuntu中执行“/ usr/bin/env | grep的终端”,在我的情况是 “的gnome-terminal”,然后用 “的gnome-terminal -e XXX” 应该工作希望它可以帮助J.

+0

该问题要求OSX终端窗口,这不是Ubuntu相关的问题。 –

4

在OS X中,你通常会运行命令,如下所示:

open -a Terminal.app /path/to/script.sh 

这将打开一个新的终端窗口,执行脚本

+0

这对我有用“open -b com.apple.terminal”,你知道-a vs -b选项的用途吗? –

+1

'-a'指定用于打开文件的应用程序,'-b'指定打开文件时应用程序使用的包标识符。它们本质上是指定应用程序打开文件的两种不同方式。 –

+0

是的第一部分工程(打开-a Terminal.app),但它似乎并没有执行脚本。这个脚本是独立运行的,所以有些奇怪,但是,谢谢,这有助于 –

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文件与defaul牛逼的应用程序,这恰好是iterm2对我来说,没有终端程序

下一个问题我已经是我必须要通过的路径作为参数的.sh文件,我不知道怎么做,但

+0

这在Linux中可能不起作用。 – ghoti

+0

耶可能不是,如果你可以建议如何创建一个快速和肮脏的解决方案在Linux上,这将帮助我 –

+1

取决于您的桌面环境。正如其他人所建议的,如果您使用Gnome,'gnome-terminal'会启动一个终端。你可以尝试使用'gnome-open'作为OSX的'open'的替代品。但是如果你的Linux桌面环境是KDE或者Afterstep或者平铺窗口管理器,这些将不起作用。如果你想要一些实际上与平台无关的东西,那么除非你使用纯文本并使用GNU屏幕,否则你可能会走运。 – ghoti