懒惰,我想链接以下两个命令,以便它可以使用一个简单的bash别名。
jekyll -w serve
为我的jekyll实例启动开发服务器。
open "http://localhost:4000"
在我的默认浏览器中启动我的jekyll应用程序。
如何将它们链接在一起,以便我可以在命令行中键入一个简单的别名来提供服务并启动?
备注
请注意,使用&&
或;
链接jekyll -w serve
和open "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
答案 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
的某一行输出,表明现在启动浏览器是安全的。
编写一个小程序,按顺序尝试连接到端口4000
。如果可以在给定时间内建立连接,则可以启动浏览器。当然你也可以使用wget或curl并依次尝试加载index.html。
根据某些文件的存在,您可能会发现jekyll
已准备就绪。您可以使用inotifywait
对代码进行编码,以便在创建此类文件后启动浏览器。 (但我不知道jekyll
,我不确定这是否真的是一种选择)