web-dev-qa-db-ja.com

「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コマンドに渡す唯一のオプションは何ですか?

4
user72685

次の例の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)
3
user62916

「EOF」文字列を引用符で囲みます。

cat > /test <<'EOF'
stuff $(pwd)
EOF

出力

stuff $(pwd)

文字通り。

ヒアドキュメントの bashマニュアル を参照してください。ターミネータ文字列内の引用符は、本文の展開と置換を防ぎます。

6
Michael Homer