Bash:如何将参数传递给heredoc脚本

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

任何想法 ?

答案1

这里的文档通过其标准输入传递到内部 bash。您需要指示 bash 从标准输入读取。如果没有命令行参数,这会自动发生。如果至少有一个非选项参数并且没有-s-c选项,则第一个非选项参数是要运行的脚本文件的名称。您可以传递-s选项来告诉 bash 从标准输入读取。

bash <<'EOF' -s -- arg1 arg2 arg3
echo "$0 $*"
EOF

答案2

或者,在大多数系统上,您可以执行以下操作:

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

这样,您的此处脚本仍然可以访问标准输入。

相关内容