2013-09-08 2 views
6

Будучи ленивым, я хотел бы соединить следующие две команды, чтобы он работал с одним простым псевдонимом bash.jekyll serve and launch

jekyll -w serve 

запускает сервер разработки для моего экземпляра jekyll.

open "http://localhost:4000" 

запускает мое приложение для jekyll в моем браузере по умолчанию.

Как я могу связать их вместе, чтобы я мог ввести один простой псевдоним в моей командной строке для обслуживания и запуска?

ПРИМЕЧАНИЯ

  • Примечание с использованием либо && или ; к цепи jekyll -w serve и open "http://localhost:4000" не будет работать, так как jekyll -w serve запускает процесс постоянной 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

Я по существу задал тот же вопрос, и [вот рабочий раствор] (HTTP: //stackoverflow.com/a/25177206/704015). –

ответ

0

В настоящее время я вижу следующие варианты:

  • использование expect в запустить jekyll, а затем в браузере в зависимости от определенной строки вывода от jekyll, который показывает, что теперь можно запустить браузер.

  • напишите небольшую программу, которая последовательно пытается подключиться к порту 4000. Если соединение может быть установлено в заданное время, браузер можно запустить. Конечно, вы также можете использовать wget или curl и последовательно пытаться загрузить index.html.

  • вы можете обнаружить, что jekyll готов к использованию на основе наличия определенных файлов. Вы можете с кодом inotifywait запустить браузер после такой файл был создан. (Но я не знаю jekyll, я не уверен, если это действительно вариант)

+0

Это именно то, что я пытался, но это не сработает, потому что для того, чтобы «открыть» http: // localhost: 4000 «' для запуска, 'jekyll -w serve' должен быть« завершен »- что это не так он запускается и ждет дальнейших событий. –

+0

Вы имеете в виду, что jekyll начинается как демон? (Я не знаю программу) – hek2mgl

+0

Сервер разработки jekyll - webrick (Ruby on rails использует также webrick как сервер разработки), и он не перемещается на задний план. После запуска результаты показаны на стандартном уровне как постоянный процесс. Так что до тех пор, пока я не завершу процесс webrick с помощью ctrl-c, вторая команда 'open 'http: // localhost: 4000' 'не будет выполнена. –

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

решает эту проблему. Один &.

+0

, как это будет происходить, когда веб-сервер на порту 4000 будет запущен до появления браузера? Это на самом деле то же самое, что и запуск браузера перед командой jekyll (что я предложил ~ час раньше), используя это решение, вам нужно будет обновить браузер после запуска веб-сервера. – hek2mgl

+0

Вы правы. Это решение недостаточно. :-( –

+0

Я добавил вариант моего ответа: poll port 4000 и запустил браузер, если соединение можно установить. Вы даже можете использовать wget или curl и попытаться загрузить - скажем, index.html - instaed wrinting небольшая программа для этого – hek2mgl

0

Я не на 100% на терминальных командах, но это, похоже, решило это для меня. Протестировал его несколько раз без проблем. (Я запускаю osx 10.8, если это делает никакой разницы для вас)

function jek { 
    jekyll -w serve & sleep 5 && open "http://localhost:4000" 
} 
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 
Смежные вопросы