特定のポイントに関する情報がどこにも見つからなかったため、歪んだシェル論理ケースを送信する必要があります(逃した場合はお詫び申し上げます)。文脈を説明しようとします。
最初の項目があり、区切り文字を使用して2番目の項目を作成しscriptA
たいと思います。私はこのheredocにファイルを含めると、いくつかのローカル変数(拡張機能など)のscriptB
2つの項目を含めたいと思います。例は次のとおりです。my_source
scriptA
scriptA
スクリプトA:
#!/bin/sh
logfile=/path/to/my_logfile
scriptB=/path/to/my_script
cat > ${scriptB} << __EOF__
. /path/to/my_source #this is a shell script
echo "Some text" | tee -a ${logfile}
__EOF__
上記のコードスニペットに関する私の質問は次のとおりです。.
コマンドのシェル拡張(つまり含む)がmy_source
内部で発生するのscriptA
か、外部から発生しますかscriptB
?
ボーナス:何とか一部を指定できますか?部分ここで文書を拡張してはいけませんか?
注:ここではPOSIXに準拠し、bashの詳細を避けようとしています。
あなたの洞察力に感謝します!
編集:答えは、.
ここのドキュメントでユーティリティを実行してはいけないということですscriptA
。ここにあるドキュメントでは、次の作業のみを行うためです。
パラメータ拡張、コマンド置換、算術拡張
これは.
拡張なしのシェル専用組み込みユーティリティです(bash、ksh、tcshのみ(...)組み込みを含むすべてのシェル組み込みユーティリティと同じ)。
洞察力をいただいた@ilkkachuに感謝します。
ベストアンサー1
いいえ、ここのドキュメントは大幅に拡張されました。二重引用符で囲まれた文字列と同じです。:
単語の一部が引用されていない場合、ここにある文書のすべての行は、パラメータ拡張、コマンド置換、および算術拡張のために拡張する必要があります。
バックスラッシュを使用して特殊文字をエスケープすることもできます。
引用に関する注意事項は、このような内容のために<<"EOF"
ここの文書の内容が拡張されないことを意味します。あなたの例では、${logfile}
シェルは入力をに渡す前に参照を拡張しますcat
。
コマンドの出力を含めたい場合でもコマンド置換を使用できますが、それがすべてであればパイプを使用することも合理的なオプションです。