3

すべてのコマンドのヒアドキュメントでサブシェルを展開するにはどうすればよいですか?

例えば:

file=report_$(date +%Y%m%d)
cat <<EOF > $file
    date
    hostname
    echo 'End of Report'
EOF

すべてのコマンドが評価されるように?

私は承知しています

file=report_$(date +%Y%m%d)
cat <<EOF > $file
    $(date))
    $(hostname)
    $(echo 'End of Report')
EOF

動作しますが、デフォルトでサブシェルを指定する方法はありますか?

4

3 に答える 3

8

;の代わりにsh(またはbash) をコマンドとして使用できます。cat実際にシェルスクリプトとして実行します:

sh <<EOF > $file
    date
    hostname
    echo 'End of Report'
EOF
于 2013-03-16T19:56:03.157 に答える
0

そうではありませんが、

cat << EOF | sh > $file
    date
    hostname
    echo 'End of Report'
EOF

同じ結果が得られます。(これは新しいshコマンド (bash必要に応じて使用) であり、現在のシェルのサブシェルではないため、同じ変数が設定されていないことに注意してください。)

(編集:これもUUOCであることに注意できませんでした:猫の無用な使用。爆発の丸薬の答えを参照してください。:-) )

于 2013-03-16T19:54:42.757 に答える