Firefox

如何讓firefox讀取標準輸入?

  • August 15, 2020
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

引用自:https://unix.stackexchange.com/questions/24931