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

cre*_*dd1 10 bash shell-script here-document

想象一下,你有一个愚蠢的脚本 test.sh ,参数被传递给它,看起来像这样:

bash test.sh arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

test.sh 是一个显示其命令行的愚蠢脚本:

#!/bin/bash
echo "$0 $*"
Run Code Online (Sandbox Code Playgroud)

我想使用 bash heredoc << 将脚本提供给 bash 来做同样的事情。所以我试过这个:

#!/bin/bash
echo "$0 $*"
Run Code Online (Sandbox Code Playgroud)

但它失败并出现错误

bash: arg1: No such file or directory
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

Gil*_*il' 13

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

bash <<'EOF' - -- arg1 arg2 arg3
echo "$0 $*"
EOF
Run Code Online (Sandbox Code Playgroud)

或者

bash <<'EOF' -s -- arg1 arg2 arg3
echo "$0 $*"
EOF
Run Code Online (Sandbox Code Playgroud)