私は、特定のheredoc構文がファイル記述子を処理する理由を新しいユーザーに明確にするために、この質問と回答を投稿しました。最初は理解するのに苦労しました。
例をご覧ください。
bash << EOF0
command1
<< E0F1
Proudly_Printed_With_Heredoc
EOF1
E0F0
なぜこれを行うべきですか:
bash /dev/fd/5 5<< 'EOF0'
command1
cat << EOF1 >> /etc/apache2/apache2.conf
Proudly_Printed_With_Heredoc
EOF1
EOF0
答え1
最初の例がないため、cat
ファイル記述子は不要です。
bash << EOF0
command1
cat << E0F1
Proudly_Printed_With_Heredoc
EOF1
E0F0
ただし、heredocから入力を受け取るのではなく、特定のコマンドと対話するにはファイル記述子が必要です。
答え2
この答えを理解するには、「ファイル記述子」の完全な概念を紹介する必要があります。 「ファイル記述子」とは何で、なぜ必要なのか。すでにそのような紹介がある場合は、以下の回答にスキップしてください。いいえ - -このSEスレッドで私の答えを読んで、もう一度来てください。。
答え:
質問で私が要求した2番目の方法では、0(この場合は5)ではなくBashのファイル記述子に区切られた文書を渡します。
フレーズの最初の部分はbash /dev/fd/5
ファイル記述子5を入力として使用するbashを表し、2番目の部分は5<< EOF
シェルにそのファイル記述子にhere-docを書き込むように指示します。
メモ:
- Heredoc階層は、関連するファイル記述子の数とは無関係です。
- 0から離れている良い数字なので、数字5を与えました。 AFAIK、50、500、50,000を与えることができ、同じように動作します。