"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)

文字通り。

よりバッシュマニュアルこの記事に。終了文字列に引用符が含まれると、本文の拡張と置換が防止されます。

答え2

次の例では、2 つの文書を比較します。

(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)

関連情報