Here-Document
為什麼在一些 heredocs 之前有一個 bash 關鍵字?
在一些 heredocs 中,您會在開始符 (<<)、名稱和文件描述符之前看到關鍵字 bash。例如:
bash /dev/fd/10 10<<'SES'
為什麼 Bash 在那裡?我的意思是,我們已經在 Bash 中工作了,它不像以前那樣
cat
用於顯示文本然後將其重定向到另一個文件,cat << EOT >> /file.txt
因此我作為一個新生問,為什麼我們需要關鍵字 bash。
bash
沒有關鍵字,它是正在執行的命令。它正在通過參數/dev/fd/10
。執行腳本的 shell(可能是也可能不是 bash)正在設置一個從文件描述符 10 讀取的 heredoc。因此,正在呼叫 bash 以將 heredoc 作為 shell 腳本執行。這類似於 if line read
bash /path/to/script.sh
——在這種情況下,腳本只是來自一個heredoc。為什麼有人這樣做(而不是在沒有上下文(可能還有歷史)的情況下無法回答而不僅僅是使用。一個猜測(正如 DopeGhoti 建議的那樣)是腳本可能在不同的 shell 下執行,而那一點需要 bash。另一種可能性是腳本的作者只是不知道替代方法。
( *commands* )
至於為什麼使用 FD 10 而不是標準輸入,可能是因為腳本塊也需要從標準輸入讀取。