Firefox가 표준 입력을 읽도록 하는 방법은 무엇입니까?

Firefox가 표준 입력을 읽도록 하는 방법은 무엇입니까?
echo '<h1>hello, world</h1>' |  firefox
cat index.html | firefox

이러한 명령은 효과가 없습니다.
표준 입력을 읽을 수 있으면 firefox파이프를 통해 HTML을 보낼 수 있습니다. 표준 입력을 읽을 수 있습니까?firefox
firefox

답변1

당신은 그것을 사용할 수 있습니다데이터 URI, 이와 같이:

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

&0stdin에 대한 파일 설명자이므로 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

답변2

즉, 임시 파일을 작성하고 여는 것이 더 좋습니다. 파이프가 제대로 작동하도록 하는 것은 더 복잡하며 추가적인 이점을 제공하지 못할 수도 있습니다. 즉, 내가 찾은 것은 다음과 같습니다.

firefox명령이 이미 실행 중인 Firefox 인스턴스와 통신하지 않고 실제로 Firefox를 시작하는 경우 다음을 수행할 수 있습니다.

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

파이프가 데이터를 저장하는 곳인 표준 입력을 읽도록 Firefox에 명시적으로 지시합니다. 그러나 Firefox가 이미 실행 중이라면 firefox명령은 이름을 기본 Firefox 프로세스에 전달합니다.그것은stdin을 사용하면 아마도 아무것도 제공하지 않을 것이며 확실히 파이프에 연결되지 않을 것입니다.

또한 Firefox는 파이프에서 읽을 때 콘텐츠를 많이 버퍼링하므로 새로운 HTML 줄을 제공할 때마다 페이지를 업데이트하지 않습니다(원하는 경우). Firefox를 닫고 다음을 실행해 보세요.

cat | firefox /dev/fd/0

(참고로 이 항목이 필요합니다 cat.) Firefox가 페이지 업데이트를 결정할 때까지 쉘 창에 긴 줄을 계속해서 붙여넣어 보면 얼마나 많은 데이터가 필요한지 확인할 수 있습니다. 이제 Ctrl+D새 줄을 클릭하여 파일 끝 신호를 보내고 Firefox 업데이트를 즉시 확인하세요. 하지만 그러면 더 많은 데이터를 추가할 수 없습니다.

따라서 가장 좋은 것은 아마도 다음과 같습니다.

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

답변3

나는 이것을 찾았다:

bcat - 브라우저 유틸리티로의 파이프

...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에서도 인용우즈푸르분명히 표준 입력을 처리하지만 자체 명령을 처리하는 브라우저(아마도 이에 대해 더 자세히 살펴봐야 할 것입니다)


편집: 나는 이와 같은 것이 정말로 필요했기 때문에(주로 동적으로 생성된 데이터가 있는 HTML 테이블을 보기 위해(내 Firefox는 매우 느립니다 bcat)) 사용자 정의 솔루션을 사용하려고 했습니다.다시 문자를 보내다, Ubuntu에 python-qt4WebKit 바인딩(및 종속성)을 설치했습니다. 그래서 저는 Python/PyQt4/QWebKit 스크립트를 작성했습니다. 이 스크립트는 처럼 작동하지만 bcat(같지는 않지만 ) btee자체 브라우저 창을 가지고 있습니다 .Qt4WebKit_singleinst_stdin.pyqwksisi

기본적으로 다운로드한 스크립트(및 종속성)를 사용하여 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 브라우저 구성 요소를 사용할 수 있다고 생각합니다.

답변4

당신은 그것을 사용할 수 있습니다프로세스 교체:

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

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

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

관련 정보