「cat」コマンド: 違反の可能性があるものをすべて自動的に回避するにはどうすればよいでしょうか?

「cat」コマンド: 違反の可能性があるものをすべて自動的に回避するにはどうすればよいでしょうか?

の内容をコピーすると

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)

関連情報