杰基尔发球和发射

时间:2013-09-08 10:20:05

标签: bash jekyll

懒惰,我想链接以下两个命令,以便它可以使用一个简单的bash别名。

jekyll -w serve

为我的jekyll实例启动开发服务器。

open "http://localhost:4000"

在我的默认浏览器中启动我的jekyll应用程序。

如何将它们链接在一起,以便我可以在命令行中键入一个简单的别名来提供服务并启动?

备注

  • 请注意,使用&&;链接jekyll -w serveopen "http://localhost:4000"将无效,因为jekyll -w serve会在stdout中启动持久webrick进程。这意味着第二个命令open "http://localhost:4000"将不会执行,因为第一个进程(webrick)从未执行过“完成”。

  • 当webrick开始时,我们可以看到如下典型输出: -

Configuration file: /Users/calvin/work/calviny/_config.yml
            Source: /Users/calvin/work/calviny
       Destination: /Users/calvin/work/calviny/_site
      Generating... done.
 Auto-regeneration: enabled
[2013-09-08 18:43:58] INFO  WEBrick 1.3.1
[2013-09-08 18:43:58] INFO  ruby 1.9.3 (2013-06-27) [x86_64-darwin11.4.2]
[2013-09-08 18:43:58] INFO  WEBrick::HTTPServer#start: pid=6183 port=4000

6 个答案:

答案 0 :(得分:6)

v3.70起,不再需要这些骇客。现在jekyll serve具有LiveReload功能,并且将使用-o, --open-url选项自动生成默认浏览器。 -l, --livereload选项将根据更改自动重建并刷新浏览器。

bundle exec jekyll serve -l -o

答案 1 :(得分:1)

function jek {
    jekyll -w serve & open "http://localhost:4000" 
}

解决了这个问题。一个&

答案 2 :(得分:0)

我不是100%使用终端命令,但这似乎已经为我解决了。经过几次测试没有问题。 (如果它对你有任何影响,我正在运行osx 10.8)

function jek {
    jekyll -w serve & sleep 5 && open "http://localhost:4000"
}

答案 3 :(得分:0)

正如hek2mgl建议的那样,您可以使用expect

执行此操作
set timeout 5
spawn jekyll serve
expect {
    -re {Server address:\s+(.+)$} {
        set address $expect_out(1,string)
    }
}
expect "Server running..."
catch {
    exec xdg-open $address
}
interact

答案 4 :(得分:0)

<form>

答案 5 :(得分:-1)

目前我看到以下选项:

  • 使用expect启动jekyll以及之后的浏览器,具体取决于jekyll的某一行输出,表明现在启动浏览器是安全的。

    < / LI>
  • 编写一个小程序,按顺序尝试连接到端口4000。如果可以在给定时间内建立连接,则可以启动浏览器。当然你也可以使用wget或curl并依次尝试加载index.html。

  • 根据某些文件的存在,您可能会发现jekyll已准备就绪。您可以使用inotifywait对代码进行编码,以便在创建此类文件后启动浏览器。 (但我不知道jekyll,我不确定这是否真的是一种选择)