Firefox
如何讓firefox讀取標準輸入?
echo '<h1>hello, world</h1>' | firefox cat index.html | firefox
這些命令不起作用。
如果
firefox
可以讀取標準輸入,我可以firefox
通過管道發送 HTML。是否可以
firefox
讀取標準輸入?
簡短的回答是,您最好編寫一個臨時文件並打開它。讓管道正常工作更加複雜,可能不會給您帶來任何額外的優勢。也就是說,這就是我發現的。
如果你的
firefox
命令實際上是啟動 Firefox 而不是與已經執行的 Firefox 實例對話,你可以這樣做:echo '<h1>hello, world</h1>' | firefox /dev/fd/0
它明確地告訴 Firefox 讀取它的標準輸入,這是管道放置數據的地方。但是如果 Firefox 已經在執行,該
firefox
命令只是將該名稱傳遞給 Firefox 主程序,該程序將讀取自己的標準輸入,這可能不會給它任何東西,當然也沒有連接到您的管道。此外,當從管道讀取時,Firefox 會大量緩衝內容,因此如果您要這樣做的話,它不會在每次給它新的 HTML 行時更新頁面。嘗試關閉 Firefox 並執行:
cat | firefox /dev/fd/0
(注意,你確實需要
cat
這裡。)重複粘貼一些長行到你的 shell 視窗,直到 Firefox 決定更新頁面,你可以看到它需要多少數據。Ctrl+D
現在通過點擊新行發送文件結束信號,並立即觀看 Firefox 更新。但是你不能再添加任何數據了。所以最好的可能是:
echo '<h1>hello, world</h1>' >my_temporary_file; firefox my_temporary_file
您可以使用數據 URI,如下所示:
echo '<h1>hello, world</h1>' |firefox "data:text/html;base64,$(base64 -w 0 <&0)"
&0
是標準輸入的文件描述符,因此它將標準輸入編碼為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