답변:
짧은 대답은 임시 파일을 작성하고 여는 것이 좋습니다. 파이프가 제대로 작동하게하는 것은 더 복잡하며 추가적인 이점이 없을 것입니다. 즉, 여기 내가 찾은 것이 있습니다.
귀하의 경우 firefox
명령이 실제로 대신 이미 실행중인 파이어 폭스 인스턴스와 이야기의 파이어 폭스를 시작, 당신은이 작업을 수행 할 수 있습니다 :
echo '<h1>hello, world</h1>' | firefox /dev/fd/0
이것은 파이어 폭스가 표준 입력을 읽도록 지시합니다. 그러나 Firefox가 이미 실행 중이면 firefox
명령이 해당 이름을 기본 Firefox 프로세스로 전달 하여 자체 표준 입력을 읽 습니다. 아무 것도 제공하지 않으며 파이프에 연결되어 있지 않을 것입니다.
또한 파이프에서 읽을 때 Firefox는 내용을 상당히 많이 버퍼링하므로 새로운 HTML 줄을 제공 할 때마다 페이지를 업데이트하지 않습니다. Firefox를 닫고 실행 해보십시오.
cat | firefox /dev/fd/0
(NB는 실제로 cat
여기에 필요합니다 .) Firefox가 페이지를 업데이트하기로 결정할 때까지 긴 줄을 쉘 창에 반복적으로 붙여 넣으면 얼마나 많은 데이터 가 필요한지 알 수 있습니다. 이제 Ctrl+D새 줄 을 쳐서 파일 끝 신호를 보내고 Firefox 업데이트를 즉시보십시오. 그러나 더 이상 데이터를 추가 할 수 없습니다.
아마 가장 좋습니다 :
echo '<h1>hello, world</h1>' >my_temporary_file; firefox my_temporary_file
-new-instance
있으므로이된다, ... | firefox -new-instance /dev/fd/0
.
다음 과 같이 data URI 를 사용할 수 있습니다 .
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)"
원하는 경우 두 번째 부분을 bash 스크립트에 넣을 수 있습니다 (이를 호출합니다 pipefox.sh
).
#!/bin/bash
firefox "data:text/html;base64,$(base64 -w 0 <&0)"
이제 할 수있는 일 :
echo '<h1>hello, world</h1>' |pipefox.sh
나는 이것을 찾았다:
... Ubuntu Natty에 설치하려면 다음을 수행하십시오.
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에서 로컬 호스트 주소를 가리키는 새 탭을 열었습니다 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는 계속 로딩 아이콘을 표시합니다 (syslog가 업데이트 될 때 페이지가 업데이트 될 것임).
이 bcat
홈페이지는 또한 uzbl 브라우저를 참조하는데 ,이 브라우저는 stdin을 처리 할 수 있지만, 자체 명령을 위해 (아마도 이것에 대해 더 자세히 살펴 봐야합니다)
편집 : 나는 이것과 같은 것을 필요로했기 때문에 (대부분 생성 된 데이터로 HTML 테이블을 bcat
보았고 (파이어 폭스가 유용하게 사용되는 데 실제로 느려짐 )) 사용자 정의 솔루션을 사용해 보았습니다 .ReText를 사용 했기 때문에 이미 python-qt4
우분투에 설치 및 WebKit 바인딩 (및 의존성)을 제공하므로 Python / PyQt4 / QWebKit 스크립트는- bcat
와 같지 btee
않지만 Qt4WebKit_singleinst_stdin.py
(또는 qwksisi
짧음) 자체 브라우저 창과 함께 작동합니다 .
기본적으로 다운로드 한 스크립트 (및 종속성)를 사용하면 다음 bash
과 같이 터미널 에서 별칭을 지정할 수 있습니다 .
$ alias qwksisi="python /path/to/Qt4WebKit_singleinst_stdin.py"
... 및 한 터미널에서 (별칭 지정 후) qwksisi
마스터 브라우저 창이 열립니다. 다른 터미널에서 (별칭 후) stdin 데이터를 얻기 위해 다음을 수행 할 수 있습니다.
$ echo "<h1>Hello World</h1>" | qwksisi -
... 아래 그림과 같이:
-
stdin을 가리키는 마지막을 잊지 마십시오 . 그렇지 않으면 로컬 파일 이름을 마지막 인수로 사용할 수도 있습니다.
기본적으로 여기서 문제는 해결하는 것입니다.
이와 같이, Gtk 바인딩 및 WebKit (또는 다른 브라우저 컴포넌트)를 갖는 Perl에서 동일하게 구현 될 수있다. 그러나 Mozilla의 XUL 프레임 워크를 사용하여 동일한 기능을 구현할 수 있다면 궁금합니다.이 경우 Firefox 브라우저 구성 요소와 함께 작동 할 것입니다.
'브라우저 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/
. 이 문제를 해결하려면 더 많은 작업이 필요합니다.
ffpipe
별칭.snowball과 luk3yx가 제공 한 데이터 URI 솔루션은 GNU / Linux에서 작동하지 않습니다.
다음 별칭이 작동해야합니다.
alias ffpipe='base64 -w0 <&0 | read -r x; firefox "data:text/html;base64,$x"'
예.
echo '<h1>hello, world</h1>' | ffpipe
파이프가 닫힌 후에 만 페이지가로드됩니다 (예 : 파일 끝에 도달).
파이프 된 컨텐츠의 증분 렌더링이 필요한 경우 이전에 언급 한 bcat
유틸리티 와 같은 것을 사용하는 것이 좋습니다 .
이 질문은 7 살이지만 아무도 웹 서버를 통해 파일을 제공하는 솔루션을 제안하지 않은 것에 놀랐습니다. 다음과 같은 소형 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에서이 스크립트를 테스트했습니다. 즉시 MacOS를 포함한 다른 UNIX 시스템을 처리해야합니다. 원칙적으로 Windows 용으로 준비되어 있지만 (테스트 용은 없습니다) 타임 아웃 기능을 다르게 구현해야 할 수도 있습니다.