Bash
<< 和 >> 在 bash 中與 - 一起使用時的區別
它可能有點具體,就像我在查看 rpm 包的腳本時遇到的那樣。最初的包裹有:
rpm --import - << EOF GPG KEY HERE EOF
這失敗並出現以下錯誤:-:導入讀取失敗(0)。
軟體包已修改,現在安裝時沒有以下問題:
echo "GPG KEY HERE" >> rpm --import -
我不明白為什麼第一個失敗而不是第二個。另外,有沒有可能
echo "GPG KEY HERE" | rpm --import -
作為一種選擇?
提前謝謝了!
您的第一個範例將實例之間的文本
EOF
視為具有變數插值的雙引號字元串(即,以成對反引號開頭$
或以成對反引號開頭的所有變數、命令和表達式都被評估和擴展)。這作為標準輸入提供給rpm
命令。您的第二個實例附加了這三行(也帶有變數插值):
GPG KEY HERE --import -
到
rpm
目前目錄中的文件。請特別注意它不執行rpm
命令。您的第三個選項寫入三行(再次使用變數插值):
GPG KEY HERE
作為命令的標準輸入
rpm --import -
在所有情況下,您都可以通過在字元串周圍使用單引號而不是 ndouble 引號或不使用(在第一種情況下,您會使用
<<'EOF'
)來防止變數的擴展和插值。另請注意,它似乎
rpm
不用-
作從stdin讀取的標記,因此沒有一個選項可以滿足您的需求。您將需要將 GPG 密鑰寫入文件或使用<( echo... )
構造代替-
.