Команда «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на heredocs. Любые кавычки в строке-терминаторе предотвращают любые расширения и замены в теле.

решение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)

Связанный контент