echo '<h1>hello, world</h1>' | firefox
cat index.html | firefox
Bu komutlar çalışmıyor.
Eğer firefox stdin okuyabilirse, firefox'a pipe aracılığıyla html gönderebilirim.
Firefox'un stdin okumasını sağlamak mümkün müdür?
echo '<h1>hello, world</h1>' | firefox
cat index.html | firefox
Bu komutlar çalışmıyor.
Eğer firefox stdin okuyabilirse, firefox'a pipe aracılığıyla html gönderebilirim.
Firefox'un stdin okumasını sağlamak mümkün müdür?
Yanıtlar:
Kısa cevap, geçici bir dosya yazmaktan ve onu açmaktan daha iyi olmanız. Boruların düzgün çalışmasını sağlamak daha karmaşıktır ve muhtemelen size ekstra bir avantaj sağlamaz. Bu dedi, işte bulduklarım.
Senin Eğer firefox
komut aslında yerine halihazırda çalışan Firefox örneği ile konuşurken Firefox başlıyor, bunu yapabilirsiniz:
echo '<h1>hello, world</h1>' | firefox /dev/fd/0
Hangi Firefox'a borunun verilerini koyduğu standart girişini açıkça okumasını söyler. Ancak eğer Firefox zaten çalışıyorsa, firefox
komut sadece bu ismi , kendi standart girişini okuyacak olan , muhtemelen hiçbir şey vermeyecek ve kesinlikle borunuza bağlı olmayacak olan ana Firefox işlemine aktaracaktır .
Üstelik, bir borudan okurken, Firefox işleri oldukça yoğun bir şekilde tamponlar, bu yüzden ne yapacaksanız, yeni bir HTML satırı verdiğinizde sayfayı güncellemeyecektir. Firefox'u kapatıp çalıştırmayı deneyin:
cat | firefox /dev/fd/0
(NB aslında cat
buraya ihtiyacınız var.) Firefox, sayfayı güncellemeye karar verinceye kadar kabuk pencerenize birkaç uzun satır tekrar tekrar yapıştırın ve ne kadar veri aldığını görebilirsiniz. Şimdi Ctrl+Dyeni bir satıra tıklayarak Dosya Sonu sinyalini gönderin ve Firefox güncellemesini anında izleyin. Ancak, daha fazla veri ekleyemezsiniz.
Yani en iyisi muhtemelen:
echo '<h1>hello, world</h1>' >my_temporary_file; firefox my_temporary_file
-new-instance
, böylece olur ... | firefox -new-instance /dev/fd/0
.
Aşağıdaki gibi veri URI'lerini kullanabilirsiniz :
echo '<h1>hello, world</h1>' |firefox "data:text/html;base64,$(base64 -w 0 <&0)"
&0
stdin için dosya tanımlayıcısıdır, bu nedenle stdin'i kodlar base64
, sonra bunu veri URI'sine enterpolasyon eder.
Aynı numara diğer tarayıcılar için de geçerlidir:
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)"
İsterseniz ikinci kısmı bir bash betiğine koyabilirsiniz (Ben çağıracağım pipefox.sh
):
#!/bin/bash
firefox "data:text/html;base64,$(base64 -w 0 <&0)"
Şimdi yapabilirsin:
echo '<h1>hello, world</h1>' |pipefox.sh
Bunu buldum:
bcat - pipo tarayıcı programına
... Ubuntu Natty'ye kurmak için şunu yaptım:
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
Kendi tarayıcısıyla çalıştığını düşünmüştüm - ancak yukarıdakileri çalıştırmak, çalışan bir Firefox'ta yerel bir adrese işaret eden yeni bir sekme açtı http://127.0.0.1:53718/btest
... bcat
Yüklemeyle şunları da yapabilirsiniz:
tail -f /var/log/syslog | ruby -rubygems /var/lib/gems/1.8/gems/bcat-0.6.2/bin/btee
... bir sekme tekrar açılacak, ancak Firefox yükleme simgesini göstermeye devam edecek (ve syslog güncellendiğinde görünen sayfa güncellenecektir).
Ana bcat
sayfa ayrıca , görünüşe göre stdin'i işleyebilen uzbl tarayıcıya da atıfta bulunuyor - ancak kendi komutları için (buna muhtemelen daha fazla bakmalı)
DÜZENLEME: As I (anında oluşturulan veriler ile kötü (çoğunlukla görünüm HTML tabloları böyle bir şey gerekli ve benim Firefox ile yararlı olması gerçekten yavaş oluyor bcat
), bir özel çözümü ile çalıştı kullandığım beri. ReText , ben zaten vardı python-qt4
Ubuntu'ma yükledim ve WebKit bağlamaları (ve bağımlılıkları) Bu yüzden, bir Python / PyQt4 / QWebKit betiği oluşturdum bcat
(ki gibi btee
), ancak kendi tarayıcı penceresiyle Qt4WebKit_singleinst_stdin.py
(ya da qwksisi
kısaca):
Temel olarak, indirilen komut dosyasıyla (ve bağımlılıklarla) aşağıdaki bash
gibi bir terminale takma ad verebilirsiniz :
$ alias qwksisi="python /path/to/Qt4WebKit_singleinst_stdin.py"
... ve bir terminalde (takma işlemden sonra), qwksisi
ana tarayıcı penceresini yükseltir; başka bir terminalde (yeniden takma işleminden sonra), stdin verisini elde etmek için aşağıdakileri yapabilirsiniz:
$ echo "<h1>Hello World</h1>" | qwksisi -
... Aşağıda gösterildiği gibi:
-
Sonunda stdin'e atıfta bulunmayı unutmayın ; Aksi takdirde, yerel bir dosya adı da son argüman olarak kullanılabilir.
Temel olarak, buradaki sorun çözmektir:
Bu nedenle, aynısı, örneğin Gtk bağlantıları ve WebKit (veya diğer tarayıcı bileşenlerinde) ile Perl'de uygulanabilir. Acaba, Mozilla'nın XUL çerçevesi aynı işlevselliği uygulamak için kullanılabilirse, sanırım bu durumda biri Firefox tarayıcı bileşeniyle çalışacak.
İşlem değiştirmeyi kullanabilirsiniz :
firefox <( echo '<h1>hello, world</h1>' )
firefox <( cat page_header.html contents.html footer.html )
firefox <( echo "<h1>Hello number "{1..23}"!</h1>" )
'Tarayıcı stdin' için ne aradığına bak! , güzel bir küçük kabuk betiği:
#!/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
Bu in tasarrufu ise stdin2www
, (çalıştırılabilir hale chmod +x stdin2www
), sizin örnekler aracılığıyla çalışması gerekir cat index.html | ./stdin2www
. Göreceğiniz bağlantıların , resimlerin vb. Açılacağı sayfa bir şey olduğu için başarısız olacağını unutmayın /tmp/
; Bunu düzeltmek için daha fazla çalışmaya ihtiyaç var.
Stdin'i geçici bir dosyaya yazmak için bir python betiği yazdım ve ardından geçici dosyayı Firefox ile açtım.
#!/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()
Aşağıdaki komutu bir kabuk betiği / terminal penceresinden çalıştırabilirsiniz.
Firefox'u (veya başka bir tarayıcıyı) başlatmadan önce, açılışta görüntülenecek içeriği stdin'den okuyacaktır.
HTML gönderilmiyorsa, text/html
aşağıdaki URL'deki dizeyi dosya türünden bağımsız olarak değiştirin (örneğin text/plain
veya image/png
).
firefox "data:text/html;base64,$(base64)"
ffpipe
takma ad.Kartopu ve luk3yx tarafından verilen veri URI çözümleri benim için GNU / Linux'ta çalışmıyor.
Aşağıdaki takma ad çalışmalıdır:
alias ffpipe='base64 -w0 <&0 | read -r x; firefox "data:text/html;base64,$x"'
Örneğin.
echo '<h1>hello, world</h1>' | ffpipe
Sayfa sadece boru kapatıldıktan sonra yüklenecektir (örn. Dosya sonuna ulaşıldı).
Borulu içeriğin artımlı görüntülenmesi gerekiyorsa, daha önce belirtilen bir bcat
yardımcı program gibi bir şey kullanarak daha iyi .
Bu soru yedi yaşında olmasına rağmen, kimsenin dosyayı bir web sunucusu üzerinden sunmak için bir çözüm önermediğine şaşırdım. Bu, aşağıdaki kompakt Python3 betiği ile elde edilir. Yürütülebilir bir dosya olarak kaydedin, örneğin, browse.py:
#!/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()
Ardından standart girişi varsayılan tarayıcıya yönlendirebilirsiniz:
./browser.py < somewebpage.html
echo "<html><body><h1>Hello</h1></body></html>" | browse.py
Varsayılan olarak, sunucu 8000 numaralı bağlantı noktasında çalışır, ancak bu davranış bir komut satırı argümanı ile değiştirilebilir:
./browser.py 9000 < website.html
Bu senaryoyu Linux'ta test ettim. MacOS dahil diğer UNIX sistemlerini kutudan çıkarması gerekir. Prensip olarak Windows için bile hazırlanmıştır (test için bir programım yok), ancak zaman aşımı işlevini farklı şekilde uygulamak gerekebilir.