私のスクリプトの非常に単純化されたバージョンです。
#!/usr/bin/env bash
example="$(bash -rs <<'BASH' -- 'This has been executed in restricted shell'
echo "$1"
BASH
)"
echo "$example"
Bashバージョン5.1.4を使用しているシステムでは問題なく実行されます。ただし、bashバージョン4.0.44を使用する他のシステムではエラーが発生します。
line 2: unexpected EOF while looking for matching `)'
スクリプトを次に変更すると
#!/usr/bin/env bash
example="$(bash -rs <<'BASH'
echo 'This has been executed in restricted shell'
BASH
)"
echo "$example"
または
#!/usr/bin/env bash
bash -rs <<'BASH' -- 'This has been executed in restricted shell'
echo "$1"
BASH
bashバージョン4システムでも動作します。
その理由が何であるかを知っている人はいますか?
答え1
まあ、それは間違いです。具体的にどれが問題なのか。
おそらくこれはおそらく:
ジェイ。コマンド置換内でシェルがドキュメントの末尾の区切り文字を認識しないバグを修正しました。
しかし、これは単なる推測です。
Bashバグメーリングリストの前のレポート:https://lists.gnu.org/archive/html/bug-bash/2010-07/msg00052.html