Bash

Bash:如何將參數傳遞給heredoc腳本

  • January 4, 2022

想像一下,你有一個愚蠢的腳本 test.sh,它傳遞的參數看起來像這樣:

bash test.sh arg1 arg2 arg3

test.sh 是一個顯示其命令行的愚蠢腳本:

#!/bin/bash
echo "$0 $*"

我想使用 bash heredoc << 將腳本提供給 bash 來做同樣的事情。所以我嘗試了這個:

bash &lt;&lt;'EOF' -- arg1 arg2 arg3
echo "$0 $*"
EOF

但它失敗並出現錯誤

bash: arg1: No such file or directory

任何想法 ?

這裡的文件通過其標準輸入傳遞給內部 bash。您需要指示 bash 從標準輸入中讀取。如果沒有命令行參數,這會自動發生。如果至少有一個非選項參數並且沒有-s-c選項,則第一個非選項參數是要執行的腳本文件的名稱。您可以通過-s選項告訴 bash 從標準輸入中讀取。

bash &lt;&lt;'EOF' -s -- arg1 arg2 arg3
echo "$0 $*"
EOF

或者,在大多數係統上,您可以執行以下操作:

bash /dev/fd/3 3&lt;&lt; 'EOF' arg1 arg2 arg3
echo "$0 $*"
IFS= read -rp "Enter something: "
printf 'You entered: "%s"\n' "$REPLY"
EOF

這樣,您的 here-script 仍然可以訪問標準輸入。

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