Bash
cat STDIN 在腳本中不會工作兩次
我有一個腳本,可以輸出各種資訊和 html 表單的文本欄位(方法 POST)。當我嘗試 cat <&0 時,它會正確顯示。然而幾行下來,我再次嘗試 cat <&0 並且沒有列印任何內容。我究竟做錯了什麼?
.... cat <&0 echo Content length is $CONTENT_LENGTH cat <&0 | sed -e 's/&/\n/g' | cut -d'=' -f2 ....
你沒有做錯任何事:這是我們應該期待的。
第一個
cat <&0
消耗標準輸入的全部內容,因為它就是這樣cat
做的:它讀取所有輸入直到結束。當第二次
cat <&0
執行時,標準輸入上沒有任何東西可以消耗:之前已經到達文件末尾。如果在 shell 腳本中,您需要通過標準輸入進行 2 次或更多次傳遞,則必須將其轉儲到臨時文件中,然後根據需要多次處理臨時文件。
安全地在其中創建臨時文件
/tmp
並確保在腳本終止或死亡時正確處理它們作為練習留給您:-)順便說一句, the
<&0
是不必要的,什麼也不做。它的功能是將標準輸入指向文件描述符 0……這是標準輸入……根據定義,標準輸入已經指向了!您可以cat
單獨執行該命令。