Bash

cat STDIN 在腳本中不會工作兩次

  • September 27, 2021

我有一個腳本,可以輸出各種資訊和 html 表單的文本欄位(方法 POST)。當我嘗試 cat <&0 時,它會正確顯示。然而幾行下來,我再次嘗試 cat <&0 並且沒有列印任何內容。我究竟做錯了什麼?

....
cat &lt;&0
echo Content length is $CONTENT_LENGTH
cat &lt;&0 | sed -e 's/&/\n/g' | cut -d'=' -f2

....

你沒有做錯任何事:這是我們應該期待的。

第一個cat &lt;&0消耗標準輸入的全部內容,因為它就是這樣cat做的:它讀取所有輸入直到結束。

當第二次cat &lt;&0執行時,標準輸入上沒有任何東西可以消耗:之前已經到達文件末尾。

如果在 shell 腳本中,您需要通過標準輸入進行 2 次或更多次傳遞,則必須將其轉儲到臨時文件中,然後根據需要多次處理臨時文件。

安全地在其中創建臨時文件/tmp並確保在腳本終止或死亡時正確處理它們作為練習留給您:-)

順便說一句, the&lt;&0是不必要的,什麼也不做。它的功能是將標準輸入指向文件描述符 0……這是標準輸入……根據定義,標準輸入已經指向了!您可以cat單獨執行該命令。

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