Фаворит шахты должен использовать команду Python для создания временного http сервера:
python-m SimpleHTTPServer
и доступ к файлам от этой машины по LAN как:
Другой должен загрузить файл tar в извлеченной форме как:
wget-qO - http://192.168.1.70:8000/test.bz2 | tar xjvf -
Здесь ссылка может быть любым по www, и bz2 может быть или gz, tgz или самим bz2 в этом отношении.
Короткий ответ, Вы - более обеспеченная запись временного файла и открытие это. Получение каналов работать правильно более сложно и вероятно не даст Вам дополнительных преимуществ. Тем не менее вот то, что я нашел.
Если Ваш firefox
команда на самом деле запускает Firefox вместо того, чтобы говорить с уже рабочим экземпляром Firefox, можно сделать это:
echo '<h1>hello, world</h1>' | firefox /dev/fd/0
Который говорит Firefox явно читать свой стандартный вход, который является, куда канал помещает свои данные. Но если Firefox уже работает, firefox
команда просто собирается передать то имя к основному процессу Firefox, который считает его собственный стандартный вход, который, вероятно, ничего не даст ему и конечно не подключен к Вашему каналу.
Кроме того, при чтении из канала, Firefox буферизует вещи довольно в большой степени, таким образом, он не собирается обновлять страницу каждый раз, когда Вы даете ему новую строку HTML, если это - то, для чего Вы идете. Попробуйте заключительный Firefox и выполнение:
cat | firefox /dev/fd/0
(N.B. Вам действительно на самом деле нужно cat
здесь.) Вставляют некоторые длинные линии в Ваше окно оболочки неоднократно, пока Firefox не решает обновить страницу, и Вы видите, сколько данных требуется. Теперь отправьте сигнал Конца Файла путем удара Ctrl+D в новую строку и обновления Firefox часов немедленно. Но затем Вы не можете больше добавлять данные.
Настолько лучше всего, вероятно:
echo '<h1>hello, world</h1>' >my_temporary_file; firefox my_temporary_file
Можно использовать замену процесса:
firefox <( echo '<h1>hello, world</h1>' )
firefox <( cat page_header.html contents.html footer.html )
firefox <( echo "<h1>Hello number "{1..23}"!</h1>" )
Посмотрите что, ища 'браузер stdin' поднятый!, миленький сценарий оболочки:
#!/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/
; больше работы было бы необходимо для фиксации этого.
Я нашел это:
bcat - передайте по каналу к утилите браузера
... для установки на Аккуратной Ubuntu я сделал:
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
Я думал, что это работает со своим собственным браузером - но рабочее вышеупомянутое открыло новую вкладку в уже под управлением Firefox, указывающем на адрес localhost 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
... вкладка снова откроется, но Firefox будет продолжать показывать загружающийся значок (и по-видимому обновил бы страницу, когда системный журнал обновляет).
bcat
домашняя страница также ссылается на uzbl браузер, который может, по-видимому, обработать stdin - но для его собственных команд (должен, вероятно, изучить это больше, хотя),
Править: Когда мне было нужно что-то вроде этого плохо (главным образом для просмотра HTML-таблиц с данными, сгенерированными на лету (и мой Firefox становится действительно медленным, чтобы быть полезным с bcat
), я попробовал настраиваемым решением. Так как я использую ReText, я уже установил python-qt4
и привязка WebKit (и зависимости) на моей Ubuntu. Так, я соединил Python/PyQt4/QWebKit сценарий - который работает как bcat
(не как btee
), но с его собственным окном браузера - названный Qt4WebKit_singleinst_stdin.py
(или qwksisi
если коротко):
В основном с загруженным сценарием (и зависимости) можно исказить его в a bash
терминал как это:
$ alias qwksisi="python /path/to/Qt4WebKit_singleinst_stdin.py"
... и в одном терминале (после искажения), qwksisi
повысит окно главного браузера; в то время как в другом терминале (снова после искажения), можно было сделать следующее для получения stdin данных:
$ echo "<h1>Hello World</h1>" | qwksisi -
... как показано ниже:
Не забывайте -
в конце для обращения к stdin; иначе локальное имя файла может использоваться в качестве последнего аргумента, также.
В основном проблема здесь состоит в том, чтобы решить:
По сути, то же могло быть реализовано в, скажем, Perl с привязкой Gtk и WebKit (или другой компонент браузера). Интересно, тем не менее, если бы платформа XUL Mozilla могла бы использоваться для реализации той же функциональности - я предполагаю в этом случае, можно было бы работать с компонентом браузера Firefox.
Я записал сценарий Python, чтобы записать stdin во временный файл и затем открыть временный файл с Firefox.
#!/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()
Можно использовать данные URIs, как это:
echo '<h1>hello, world</h1>' |firefox "data:text/html;base64,$(base64 -w 0 <&0)"
&0
дескриптор файла для stdin, таким образом, он кодирует stdin к base64
, затем интерполирует это в данные URI.
Тот же прием работает на другие браузеры, также:
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
Вы можете выполнить приведенную ниже команду из сценария оболочки/терминального окна.
Перед запуском Firefox (или любого другого браузера), он прочитает из своего stdin содержимое, которое будет отображаться при открытии.
Если отправляется не HTML, измените строку text/html
в приведенном ниже URL на любой тип файла (например, text/plain
или image/png
).
firefox "data:text/html;base64,$(base64)"
ffpipe
. Решения для URI данных, предоставляемые Snowball и luk3yx, не работают для меня в GNU / Linux.
Должен работать следующий псевдоним:
alias ffpipe='base64 -w0 <&0 | read -r x; firefox "data:text/html;base64,$x"'
например.
echo '<h1>hello, world</h1>' | ffpipe
Страница загружается только после закрытия конвейера (т. Е. Достижения конца файла).
Если требуется инкрементный рендеринг передаваемого по конвейеру содержимого, лучше использовать что-то вроде ранее упомянутой утилиты bcat
.
Хотя этому вопросу уже семь лет, я удивлен, что никто не предложил решение, обслуживающее файл через веб-сервер. Это достигается с помощью следующего компактного скрипта Python3. Сохраните его как исполняемый файл, например,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()
Затем вы можете перенаправить стандартный ввод в браузер по умолчанию:
./browser.py < somewebpage.html
echo "<html><body><h1>Hello</h1></body></html>" | browse.py
По умолчанию сервер работает на порту 8000, но это поведение можно изменить с помощью аргумента командной строки:
./browser.py 9000 < website.html
Я тестировал этот скрипт на Linux. Он должен работать с другими системами UNIX, включая MacOS, из коробки. Он в принципе даже подготовлен для Windows (У меня нет для тестирования ), но там может быть нужно реализовать функционал таймаута по-другому.
-new-instance
, таким образом, это становится... | firefox -new-instance /dev/fd/0
. – rampion 23.01.2015, 16:44