2013-09-08 8 views
6

आलसी होने के नाते, मैं निम्नलिखित दो आदेशों श्रृंखला के लिए इतना है कि यह एक सरल बैश उर्फ ​​के साथ काम करेंगे चाहते हैं।Jekyll की सेवा और लांच

jekyll -w serve 

मेरे जेकिल उदाहरण के लिए विकास सर्वर शुरू करता है।

open "http://localhost:4000" 

मेरे जेबिल एप्लिकेशन को मेरे डिफ़ॉल्ट ब्राउज़र में लॉन्च करता है।

मैं उन्हें एक साथ कैसे श्रृंखलाबद्ध कर सकता हूं ताकि मैं टाइप कर सकूं और लॉन्च करने के लिए मेरी कमांड लाइन में एक साधारण ऊर्फ टाइप कर सकूं?

नोट

  • नोट या तो && या ; श्रृंखला 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

मैं मूलतः एक ही सवाल पूछा, और (http [यहां पर काम कर समाधान है]: //stackoverflow.com/a/25177206/704015)। –

उत्तर

0

वर्तमान में मैं निम्नलिखित विकल्पों देखें:

  • उपयोग expect कोसे आउटपुट की एक निश्चित पंक्ति के आधार पर जैकिल और बाद में ब्राउजर पर शुरू करेंजो दिखाता है कि ब्राउज़र को अभी शुरू करना सुरक्षित है।

  • एक छोटा सा प्रोग्राम है जो क्रमिक रूप से बंदरगाह 4000 से कनेक्ट करने की कोशिश करता है लिखते हैं। यदि किसी दिए गए समय में कनेक्शन स्थापित किया जा सकता है, तो ब्राउज़र शुरू किया जा सकता है। बेशक आप wget या curl का भी उपयोग कर सकते हैं और अनुक्रमिक रूप से index.html को लोड करने का प्रयास कर सकते हैं।

  • आप पहचान सकते हैं कि jekyll कुछ फ़ाइलों की उपस्थिति पर आधारित तैयार है। के बाद ब्राउज़र को शुरू करने के लिए आप inotifywait के साथ कुछ कोड कर सकते हैं, ऐसी फ़ाइल बनाई गई है। (लेकिन मैं jekyll पता नहीं, मुझे यकीन है कि नहीं कर रहा हूँ अगर यह वास्तव में एक विकल्प है)

+0

यह वही है जो मैंने कोशिश की लेकिन यह काम नहीं करेगा क्योंकि 'ओपन' http: // localhost: 4000 "' चलाने के लिए, 'jekyll -w सेवा' को "पूरा" होने की आवश्यकता है - जो तब से नहीं है यह लॉन्च और आगे की घटनाओं के लिए इंतजार कर रहा है। –

+0

का मतलब है कि जेकिल एक डिमन के रूप में शुरू होता है? (मुझे प्रोग्राम नहीं पता) – hek2mgl

+0

जेकिल विकास सर्वर हैब्रिक (रेल पर रूबी भी विकास सर्वर के रूप में वीब्रिक का उपयोग करता है) और यह पृष्ठभूमि में नहीं जाता है। लॉन्च होने पर, परिणाम लगातार प्रक्रिया के रूप में stdout पर दिखाए जाते हैं। तो जब तक मैं एक ctrl-c के साथ webrick प्रक्रिया को समाप्त नहीं करता, तब तक दूसरा आदेश 'खुला "http: // localhost: 4000" निष्पादित नहीं होगा। –

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

समस्या का हल। एक एकल &

+0

यह सुनिश्चित करेगा कि ब्राउज़र 4000 पर वेबसर्वर ब्राउज़र शुरू होने से पहले शुरू हो जाएगा? वास्तव में यह है कि इस समाधान का उपयोग कर jekyll कमांड (जो मैंने पहले ~ घंटा पहले सुझाया है) से पहले ब्राउजर शुरू करने जैसा ही है, आपको वेब सर्वर शुरू होने के बाद ब्राउज़र को रीफ्रेश करना होगा – hek2mgl

+0

आप सही हैं। यह समाधान पर्याप्त नहीं है। :-( –

+0

मैंने अपने उत्तर में एक विकल्प जोड़ा है: मतदान पोर्ट 4000 और यदि कनेक्शन स्थापित किया जा सकता है तो ब्राउजर शुरू करें। आप भी wget या curl का उपयोग कर सकते हैं और लोड करने का प्रयास कर सकते हैं - मान लें कि index.html - wrinting के instaed उसके लिए एक छोटा सा कार्यक्रम – hek2mgl

0

मैं टर्मिनल कमांड पर 100% नहीं हूं, लेकिन ऐसा लगता है कि यह मेरे लिए हल हो गया है। मुद्दे के बिना इसे कुछ बार परीक्षण किया। (मैं ओएसएक्स 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 
संबंधित मुद्दे