LINUX.ORG.RU

bash, и экранирование кавычек

 


0

1

Привет, Лор. Сразу к делу. Есть скрипт, в нём есть цикл, который обходит некую переменную, и выполняет такую команду. Всё вроде работает, но не могу нормально экранировать кавычки.

                        ssh root@"$HOST0" "echo \"\$TTL    3600
$i.                                       IN      SOA     ns1.$i. root.$i. (2013071701 10800 3600 604800 86400)
$i.                                       IN      NS      ns1.$i.
$i.                                       IN      NS      ns2.$i.
$i.                                       IN      MX      10 mail
$i.                                       IN      MX      20 mail
$i.                                       IN      A        $HOST0
www                                       IN      A        $HOST0
ftp                                       IN      A        $HOST0
mail                                      IN      A        $HOST0
smtp                                      IN      A        $HOST0
pop                                       IN      A        $HOST0
*                                         IN      A        $HOST0
$i.                                       IN      TXT      \"v=spf1 ip4:$HOST0 a mx ~all\"\"  >        /etc/bind/db.$i"

А получается в текстовом файлике:

    3600
blablabla.com.                                       IN      SOA     ns1.blablabla.com. root.blablabla.com. (2013071701 10800 3600 604800 86400)
blablabla.com.                                       IN      NS      ns1.blablabla.com.
blablabla.com.                                       IN      NS      ns2.blablabla.com.
blablabla.com.                                       IN      MX      10 mail
blablabla.com.                                       IN      MX      20 mail
blablabla.com.                                       IN      A        127.0.0.1
www                                       IN      A        127.0.0.1
ftp                                       IN      A        127.0.0.1
mail                                      IN      A        127.0.0.1
smtp                                      IN      A        127.0.0.1
pop                                       IN      A        127.0.0.1
*                                         IN      A        127.0.0.1
blablabla.com.                                       IN      TXT      v=spf1 ip4:127.0.0.1 a mx ~all
А должно получаться по-другому, в начале, на первой строке должно быть.

$TTL    3600

А в конце должно быть:

blablabla.com.                                       IN      TXT      "v=spf1 ip4:127.0.0.1 a mx ~all"

Собственно, прошу помощи. Наверняка истина где-то рядом.

Ответ на: комментарий от blablacon

Дык аналогично:

$ sh -c "echo \"bla bla \\\"текст в кавычках\\\"\""
bla bla "текст в кавычках"

Сначала первый шел раскрывает экранирующие последовательности и получает из

"echo \"bla bla \\\"текст в кавычках\\\"\""
строку
echo "bla bla \"текст в кавычках\""

А потом второй шел раскрывает экранирующие последовательности еще раз и исполняет команду echo с аргументом

bla bla "текст в кавычках"

Deleted
()

Плохого насоветовали. Лучше так.

ssh root@$HOST0 "cat > /etc/bin/db.$i" <<EOF
\$TTL 3600
$i.   IN      SOA    ns1.$i. root.$i. (2013071701 10800 3600 604800 86400)
$i.   IN      NS     ns1.$i.
$i.   IN      NS     ns2.$i.
$i.   IN      MX     10 mail
$i.   IN      MX     20 mail
$i.   IN      A      $HOST0
www   IN      A      $HOST0
ftp   IN      A      $HOST0
mail  IN      A      $HOST0
smtp  IN      A      $HOST0
pop   IN      A      $HOST0
*     IN      A      $HOST0
$i.   IN      TXT    "v=spf1 ip4:$HOST0 a mx ~all"
EOF
unterwulf
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.