Bash 杰基尔发球并发射

Bash 杰基尔发球并发射,bash,jekyll,Bash,Jekyll,由于懒惰,我希望将以下两个命令链接起来,以便它可以使用一个简单的bash别名 jekyll -w serve 为我的jekyll实例启动开发服务器 open "http://localhost:4000" 在默认浏览器中启动我的jekyll应用程序 如何将它们链接在一起,以便在命令行中键入一个简单的别名来服务和启动 注释 注意使用&&或连锁jekyll-w服务和打开”http://localhost:4000“将不起作用,因为jekyll-w serve会在stdout中启动持久的webr

由于懒惰,我希望将以下两个命令链接起来,以便它可以使用一个简单的bash别名

jekyll -w serve
为我的jekyll实例启动开发服务器

open "http://localhost:4000"
在默认浏览器中启动我的jekyll应用程序

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

注释

  • 注意使用
    &&
    连锁
    jekyll-w服务
    打开”http://localhost:4000“
    将不起作用,因为
    jekyll-w serve
    会在stdout中启动持久的webrick进程。这意味着第二个命令
    open“http://localhost:4000“
    将不会执行,因为第一个进程(webrick)从未“完成”

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


目前,我看到以下选项:

  • 使用
    expect
    在浏览器上启动jekyll和更高版本,具体取决于
    jekyll
    的某一行输出,该行显示现在启动浏览器是安全的

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

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


解决了这个问题。一个
&

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


正如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

jekyll-serve>/dev/null 2>&1&sleep 5&open”http://localhost:4000“

到目前为止,这些黑客不再需要。现在,
jekyllserve
具有LiveReload功能,并将自动生成带有
-o,--openURL
选项的默认浏览器。
-l,--livereload
选项将在更改时自动重建和刷新浏览器

bundle exec jekyll serve -l -o

这正是我所尝试的,但它不起作用,因为为了
open“http://localhost:4000“
要运行,
jekyll-w serve
需要“完成”-因为它已启动并等待进一步的事件,所以没有完成。你是说jekyll作为守护进程启动?(我不知道该程序)jekyll开发服务器是webrick(RubyonRails也使用webrick作为开发服务器),它不会移动到后台。启动时,结果将作为一个持久进程显示在标准输出上。因此,在我用ctrl-c终止webrick进程之前,第二个命令
open”http://localhost:4000“
将不执行。为什么不先在后台启动浏览器呢。(当jekyll准备好后,您需要重新加载页面一次,这应该可以,不是吗?)。我正在尝试在开发服务器启动后启动开发服务器并启动web应用程序,而无需手动干预。我很懒。这将如何确保在生成浏览器之前启动端口4000上的Web服务器?实际上,这与在使用jekyll命令之前启动浏览器(我建议的~hour before)相同。使用此解决方案,您需要在web服务器启动后刷新浏览器。我在回答中添加了一个选项:轮询端口4000,如果可以建立连接,则启动浏览器。你甚至可以使用wget或curl,试着加载一个小程序——比如index.html——我问了一个基本相同的问题,为什么我总是要在谷歌搜索结果的第二页的非官方帖子上找到这样的基本内容,而不是从官方的Jekyll文档中。
function jek {
    jekyll -w serve & sleep 5 && open "http://localhost:4000"
}
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
bundle exec jekyll serve -l -o