कैसे फ़ायरफ़ॉक्स पढ़ने के लिए स्टड बनाने के लिए - -


29
echo '<h1>hello, world</h1>' |  firefox
cat index.html | firefox

ये आदेश काम नहीं करते।
अगर फ़ायरफ़ॉक्स स्टडिन पढ़ सकता है, तो मैं पाइप के माध्यम से फ़ायरफ़ॉक्स को html भेज सकता हूं।
क्या फायरफॉक्स रीड स्टैडिन बनाना संभव है?


2
वास्तव में आप क्या हासिल करना चाहते हैं?
pbm

6
@pbm: अस्थायी डेटा को संग्रहीत करने से बचने के लिए उपयोगी हो सकता है ...
l0b0

जवाबों:


23

संक्षिप्त उत्तर है, आप एक अस्थायी फ़ाइल लिखने और उसे खोलने से बेहतर हैं। ठीक से काम करने के लिए पाइप प्राप्त करना अधिक जटिल है और शायद आपको कोई अतिरिक्त लाभ नहीं देगा। उस ने कहा, यहाँ जो मैंने पाया है।

यदि आपका firefoxआदेश वास्तव में पहले से चल रहे फ़ायरफ़ॉक्स उदाहरण के साथ बात करने के बजाय फ़ायरफ़ॉक्स शुरू कर रहा है, तो आप यह कर सकते हैं:

echo '<h1>hello, world</h1>' | firefox /dev/fd/0

जो अपने मानक इनपुट को पढ़ने के लिए फ़ायरफ़ॉक्स को स्पष्ट रूप से बताता है, जो कि जहां पाइप अपना डेटा डाल रहा है। लेकिन अगर फ़ायरफ़ॉक्स पहले से ही चल रहा है, तो firefoxकमांड केवल उस नाम को मुख्य फ़ायरफ़ॉक्स प्रक्रिया में पारित करने जा रहा है, जो अपने स्वयं के मानक इनपुट को पढ़ेगा , जो शायद इसे कुछ भी नहीं देगा और निश्चित रूप से आपके पाइप से जुड़ा नहीं है।

इसके अलावा, जब एक पाइप से पढ़ते हैं, तो फ़ायरफ़ॉक्स बहुत अधिक चीजों को बफ़र करता है, इसलिए हर बार जब आप इसे HTML की एक नई लाइन देते हैं, तो यह पृष्ठ को अपडेट करने वाला नहीं है, यदि आप इसके लिए जा रहे हैं। फ़ायरफ़ॉक्स बंद करने और चलाने का प्रयास करें:

cat | firefox /dev/fd/0

(एनबी आपको वास्तव में catयहां की आवश्यकता है।) फ़ायरफ़ॉक्स पेज को अपडेट करने का निर्णय लेने तक अपनी शेल विंडो में बार-बार कुछ लंबी लाइनें पेस्ट करें, और आप देख सकते हैं कि इसमें कितना डेटा लगता है। अब Ctrl+Dएक नई लाइन पर हिट करके एंड-द-फ़ाइल सिग्नल भेजें , और तुरंत फ़ायरफ़ॉक्स अपडेट देखें। लेकिन फिर आप कोई और डेटा नहीं जोड़ सकते।

तो सबसे अच्छा शायद है:

echo '<h1>hello, world</h1>' >my_temporary_file; firefox my_temporary_file

2
आप फ़ायरफ़ॉक्स को एक नई प्रक्रिया खोलने के लिए बाध्य कर सकते हैं -new-instance, इसलिए यह बन जाता है ... | firefox -new-instance /dev/fd/0
रैंप

यह बहुत अच्छा काम करता है, धन्यवाद! किसी को पता है कि इसके बजाय क्रोम के साथ यह कैसे करना है?
अलेक्जेंडर मिल्स

33

आप डेटा यूआरआई का उपयोग कर सकते हैं , जैसे:

echo '<h1>hello, world</h1>' |firefox "data:text/html;base64,$(base64 -w 0 <&0)"

&0स्टड के लिए फ़ाइल डिस्क्रिप्टर है, इसलिए यह स्टड को एनकोड करता है base64, फिर डेटा यूआरआई में इंटरपोल करता है।

अन्य ब्राउज़र के लिए भी यही चाल काम करती है:

echo '<h1>hello, world</h1>' |chromium "data:text/html;base64,$(base64 -w 0 <&0)"
echo '<h1>hello, world</h1>' |opera    "data:text/html;base64,$(base64 -w 0 <&0)"

यदि आप चाहें, तो आप दूसरे भाग को बैश स्क्रिप्ट में डाल सकते हैं (मैं इसे कॉल करूँगा pipefox.sh):

#!/bin/bash
firefox "data:text/html;base64,$(base64 -w 0 <&0)"

अब आप कर सकते हैं:

echo '<h1>hello, world</h1>' |pipefox.sh

1
पूरी तरह से भयानक !, आप इस के साथ कैसे आए? आप संदर्भ के साथ pipebrowser का नाम बदलकर pipefox.sh में सुधार कर सकते हैं: $ 1 "डेटा: टेक्स्ट / html, बेस 64, $ (बेस 64 -w 0 <& 0)" अपनी पसंद के अनुसार ब्राउज़र चुनने की अनुमति देता है
अल्बाफ़न

मैं यहाँ एक समान प्रश्न है अगर यह समान अंतर है, stackoverflow.com/questions/32303025/…
1.21 गीगावाट

2
यह दुर्भाग्य से अब और काम नहीं करता है, देखें blog.mozilla.org/security/2017/11/27/… क्यों डेटा urls में अधिकांश mimetypes अब toplevel नेविगेशन से अवरुद्ध हो जाते हैं।
TheDiveO

7

मुझे मिला:

bcat - ब्राउज़र उपयोगिता के लिए पाइप

... उबंटू नेट्टी पर स्थापित करने के लिए, मैंने किया:

sudo apt-get install rubygems1.8
sudo gem install bcat
# to call
ruby -rubygems /var/lib/gems/1.8/gems/bcat-0.6.2/bin/bcat
echo "<b>test</b>" | ruby -rubygems /var/lib/gems/1.8/gems/bcat-0.6.2/bin/bcat

मैंने सोचा कि यह अपने स्वयं के ब्राउज़र के साथ काम करता है - लेकिन ऊपर चल रहे फ़ायरफ़ॉक्स ने एक पहले से चल रहे फ़ायरफ़ॉक्स में एक नया टैब खोला, एक स्थानीयहोस्ट पते पर इंगित किया http://127.0.0.1:53718/btest... bcatस्थापना के साथ आप भी कर सकते हैं:

tail -f /var/log/syslog | ruby -rubygems /var/lib/gems/1.8/gems/bcat-0.6.2/bin/btee

... एक टैब फिर से खुलेगा, लेकिन फ़ायरफ़ॉक्स लोडिंग आइकन दिखाता रहेगा (और जाहिरा तौर पर पेज को अपडेट करते समय अपडेट करेगा)।

bcatहोमपेज पर भी संदर्भ देता uzbl ब्राउज़र है, जो जाहिरा तौर पर stdin संभाल कर सकते हैं - लेकिन अपने स्वयं के आदेश के लिए (शायद इस में और अधिक है, हालांकि देखना चाहिए)


संपादित करें: जैसा कि मुझे कुछ इस तरह की जरूरत थी (ज्यादातर HTML तालिकाओं को देखने के लिए जिसमें मक्खी पर उत्पन्न डेटा के साथ HTML (और मेरा फ़ायरफ़ॉक्स वास्तव में धीमी गति से उपयोगी हो bcatरहा है), मैंने एक कस्टम समाधान के साथ प्रयास किया। चूंकि मैं ReText का उपयोग करता हूं, मैं पहले से ही था। python-qt4मेरे Ubuntu पर स्थापित और WebKit बाइंडिंग (और निर्भरताएं)। इसलिए, मैंने एक Python / PyQt4 / QWebKit स्क्रिप्ट को एक साथ रखा - जो काम करती है bcat(जैसे नहीं btee), लेकिन अपनी ब्राउज़र विंडो के साथ - Qt4WebKit_singleinst_stdin.py(या qwksisiसंक्षेप में):

मूल रूप से, डाउनलोड की गई स्क्रिप्ट (और निर्भरता) के साथ आप इसे bashइस तरह से एक टर्मिनल में दे सकते हैं :

$ alias qwksisi="python /path/to/Qt4WebKit_singleinst_stdin.py"

... और एक टर्मिनल (अलियासिंग के बाद), qwksisiमास्टर ब्राउज़र विंडो बढ़ाएगा; जबकि दूसरे टर्मिनल में (फिर से एलियासिंग के बाद), व्यक्ति स्टड डेटा प्राप्त करने के लिए निम्न कार्य कर सकता है:

$ echo "<h1>Hello World</h1>" | qwksisi - 

... जैसा की नीचे दिखाया गया:

qwksisi

-स्टड को संदर्भित करने के लिए अंत में मत भूलना ; अन्यथा स्थानीय फ़ाइल नाम का उपयोग अंतिम तर्क के रूप में भी किया जा सकता है।

मूल रूप से, यहाँ समस्या को हल करना है:

  • एक उदाहरण की समस्या (इसलिए स्क्रिप्ट का पहला रन "मास्टर" बन जाता है और ब्राउज़र विंडो को बढ़ा देता है - जबकि बाद में रन केवल डेटा को मास्टर और एक्जिट करने के लिए पास करता है)
  • वैरिएबल साझा करने के लिए इंटरप्रोसेस संचार (इसलिए बाहर निकलने की प्रक्रिया मास्टर ब्राउज़र विंडो में डेटा पास कर सकती है)
  • नई सामग्री के लिए जाँच करने वाले मास्टर में टाइमर अपडेट, और नई सामग्री आने पर ब्राउज़र विंडो को अपडेट करता है।

जैसे, समान को Gtk बाइंडिंग और WebKit (या अन्य ब्राउज़र घटक) के साथ पर्ल, में लागू किया जा सकता है। मुझे आश्चर्य है, हालांकि, अगर मोज़िला द्वारा XUL फ्रेमवर्क का उपयोग एक ही कार्यक्षमता को लागू करने के लिए किया जा सकता है - मुझे लगता है कि उस मामले में, एक फ़ायरफ़ॉक्स ब्राउज़र घटक के साथ काम करेगा।


6

आप प्रक्रिया प्रतिस्थापन का उपयोग कर सकते हैं :

 firefox <( echo '<h1>hello, world</h1>' )

 firefox <( cat page_header.html contents.html footer.html )

 firefox  <( echo "<h1>Hello number "{1..23}"!</h1>" )

1
उबटन और फ़ायरफ़ॉक्स 29.0 का उपयोग करके Ubuntu 14.04 के साथ काम करने के लिए इन्हें प्राप्त नहीं कर सकते
जॉन एस ग्रुबर

5

देखो क्या 'ब्राउज़र स्टडिन' के लिए खोज कर दिया! , एक अच्छा सा खोल स्क्रिप्ट:

#!/bin/sh

# read from stdin, write to a temp file, open the temp file in a browser, then delete it
tmpfile=$(tempfile); cat > $tmpfile; x-www-browser $tmpfile; rm $tmpfile

यदि आप इसे सहेजते हैं stdin2www, तो इसे निष्पादन योग्य बनाएं ( chmod +x stdin2www), आपके उदाहरणों के माध्यम से काम करना चाहिए cat index.html | ./stdin2www। बस ध्यान दें कि संबंधित लिंक , चित्र, आदि विफल हो जाएंगे क्योंकि जो पृष्ठ खोला जाएगा वह कुछ है /tmp/; इसे ठीक करने के लिए और अधिक कार्य की आवश्यकता होगी।


3

मैंने एक अस्थायी फ़ाइल पर स्टड लिखने के लिए एक पायथन स्क्रिप्ट लिखी और फिर फ़ायरफ़ॉक्स के साथ अस्थायी फ़ाइल खोलें।

#!/usr/bin/env python
import sys
import tempfile
import subprocess

with tempfile.NamedTemporaryFile() as f:
  f.write(sys.stdin.read())
  f.flush()
  process = subprocess.Popen(['firefox', f.name])
  process.wait()

0

आप शेल स्क्रिप्ट / टर्मिनल विंडो से नीचे कमांड चला सकते हैं।

फ़ायरफ़ॉक्स (या किसी भी अन्य ब्राउज़र) को लॉन्च करने से पहले, यह खोलने पर प्रदर्शित करने के लिए सामग्री स्टड है।

यदि यह HTML नहीं भेजा जा रहा है, text/htmlतो फ़ाइल के प्रकार (उदाहरण के लिए, text/plainया image/png) के लिए नीचे दिए गए URL में स्ट्रिंग बदलें ।

firefox "data:text/html;base64,$(base64)"

0

एक साधारण ffpipeउपनाम।

स्नोबॉल और luk3yx द्वारा दिए गए डेटा यूआरआई समाधान जीएनयू / लिनक्स पर मेरे लिए काम नहीं कर रहे हैं।

निम्नलिखित उपनाम काम करना चाहिए:

alias ffpipe='base64 -w0 <&0 | read -r x; firefox "data:text/html;base64,$x"'

जैसे।

echo '<h1>hello, world</h1>' | ffpipe

सीमाएं

एक बार पाइप बंद होने के बाद ही पेज लोड होगा (यानी एंड-ऑफ-फ़ाइल पहुँच गया है)।

यदि पाइप की गई सामग्री के वृद्धिशील प्रतिपादन की आवश्यकता होती है, तो आप पहले से बताई गई bcatउपयोगिता जैसी किसी चीज़ का उपयोग करना बेहतर समझते हैं।


0

हालांकि यह सवाल सात साल पुराना है लेकिन मुझे आश्चर्य है कि किसी ने भी वेब सर्वर के माध्यम से फाइल परोसने वाले समाधान का प्रस्ताव नहीं दिया। यह निम्नलिखित कॉम्पैक्ट पायथन 3 स्क्रिप्ट के साथ हासिल किया गया है। इसे निष्पादन योग्य फ़ाइल के रूप में सहेजें, कहते हैं, ब्राउज़ करें:

#!/usr/bin/env python3
import sys, os, time, platform, signal
from subprocess import Popen
from http.server import HTTPServer, BaseHTTPRequestHandler
sys.stderr = open(os.devnull, 'w')
def timeoutHandler(signum, frame):
    sys.exit("")
signal.signal(signal.SIGALRM, timeoutHandler)
signal.alarm(2)
html = sys.stdin.read()
port = int(sys.argv[1]) if len(sys.argv) > 1 else 8000
class Handler(BaseHTTPRequestHandler):
    def _set_headers(self):
        self.send_response(200)
        self.send_header("content-type", "text/html")
        self.end_headers()
    def do_GET(self):
        self._set_headers()
        self.wfile.write(b = bytes(html, "utf-8"))
platform = platform.system().lower()
if platform.find("win") >= 0: command = "start"
elif platform.find("mac") >= 0 or platform.find("darwin") >= 0: command = "open"
else: command = "xdg-open"
p = Popen([command, "http://localhost:" + str(port) + "/"])
httpd = HTTPServer(("localhost", port), Handler)
httpd.serve_forever()

फिर आप डिफ़ॉल्ट ब्राउज़र पर मानक इनपुट को पुनर्निर्देशित कर सकते हैं:

./browser.py < somewebpage.html
echo "<html><body><h1>Hello</h1></body></html>" | browse.py

डिफ़ॉल्ट रूप से सर्वर पोर्ट 8000 पर काम करता है, लेकिन उस व्यवहार को कमांड लाइन तर्क से बदला जा सकता है:

./browser.py 9000 < website.html

मैंने लिनक्स पर इस स्क्रिप्ट का परीक्षण किया। इसे मैकओएस सहित अन्य यूनिक्स प्रणालियों को संभालना चाहिए। यह सिद्धांत रूप में विंडोज के लिए भी तैयार है (मेरे पास परीक्षण के लिए एक नहीं है), लेकिन टाइमआउट कार्यक्षमता को अलग तरीके से लागू करने के लिए आवश्यक हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.