Bash
Bash:如何將參數傳遞給heredoc腳本
想像一下,你有一個愚蠢的腳本 test.sh,它傳遞的參數看起來像這樣:
bash test.sh arg1 arg2 arg3
test.sh 是一個顯示其命令行的愚蠢腳本:
#!/bin/bash echo "$0 $*"
我想使用 bash heredoc << 將腳本提供給 bash 來做同樣的事情。所以我嘗試了這個:
bash <<'EOF' -- arg1 arg2 arg3 echo "$0 $*" EOF
但它失敗並出現錯誤
bash: arg1: No such file or directory
任何想法 ?
這裡的文件通過其標準輸入傳遞給內部 bash。您需要指示 bash 從標準輸入中讀取。如果沒有命令行參數,這會自動發生。如果至少有一個非選項參數並且沒有
-s
或-c
選項,則第一個非選項參數是要執行的腳本文件的名稱。您可以通過-s
選項告訴 bash 從標準輸入中讀取。bash <<'EOF' -s -- arg1 arg2 arg3 echo "$0 $*" EOF
或者,在大多數係統上,您可以執行以下操作:
bash /dev/fd/3 3<< 'EOF' arg1 arg2 arg3 echo "$0 $*" IFS= read -rp "Enter something: " printf 'You entered: "%s"\n' "$REPLY" EOF
這樣,您的 here-script 仍然可以訪問標準輸入。