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に指示する必要があります。これはコマンドライン引数なしで自動的に発生します。オプション以外の引数が1つ以上ある場合、またはオプションがない場合、最初の-s-cオプション引数は実行するスクリプトファイルの名前です。-sbashに標準入力から読み取るように指示するオプションを渡すことができます。

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

これにより、ここのスクリプトはまだ標準入力にアクセスできます。

関連情報