の内容をコピーすると
httpd.conf
そしてそれを cat コマンドに貼り付けます。たとえば、次のようになります。
#!/bin/bash
cat > /test << EOF
pasted here..
EOF
次のエラーが発生します:
-bash: command substitution: line 1: unexpected EOF while looking for matching `''
-bash: command substitution: line 4: syntax error: unexpected end of file
おそらく解決策は、ドル記号や引用符などを回避することです。
しかし、これは非常に大きなファイルなので、ドル記号を自動的にエスケープすることはできますか?
別のプログラムでそれらをエスケープしてから、cat コマンドに渡すことが唯一の選択肢ですか?
答え1
「EOF」文字列を引用符で囲みます。
cat > /test <<'EOF'
stuff $(pwd)
EOF
出力
stuff $(pwd)
文字通り。
を参照してくださいbash マニュアルヒアドキュメントについて。終端文字列内の引用符は、本文での展開や置換を防止します。
答え2
次の例の 2 つの here ドキュメントを比較します。
(yeti@darkstar:6)~/wrk/tmp$ cat ./xyzzy
#!/bin/bash
cat << EOF
Version 1 - Today is $(date)
EOF
cat << 'EOF'
Version 2 - Today is $(date)
EOF
(yeti@darkstar:6)~/wrk/tmp$ ./xyzzy
Version 1 - Today is Sa 21. Jun 08:51:38 CEST 2014
Version 2 - Today is $(date)