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)"

必要に応じて、2番目の部分を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がすでに実行されている場合、コマンドは名前をデフォルトのfirefoxFirefoxプロセスに渡します。それ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/btestbcatインストールしたら、次のこともできます。

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>" )

関連情報