Решено: Кавычки в bash-скрипте

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Решено: Кавычки в bash-скрипте

Сообщение newsrc »

Стыдно, но всё же:

Код: Выделить всё

list_hosts="/var/tmp/list_hosts"
keys_dir="/var/tmp/keys"
var="/var/tmp/arj.tar.gz"
for hostbackup in `cat $list_hosts | grep -v "^#"`
do
   ssh -i $keys_dir/ssh_rsa_$hostbackup root@$hostbackup 'tar czf $var `cat /root/backup_list` &> /dev/null'
done


На удаленной машине создаю архив из файлов, перечисленных в /root/backup_list

Скрипт не работает, а именно переменная $var не раскрывается. Если вместо неё указать прямой путь, то работает.
Подскажите решение.
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Решено: Кавычки в bash-скрипте

Сообщение sciko »

В двойных кавычках (" ") переменные раскрываются, а в одинарных (' ') -- нет. Да, не удобно, но вот такая особенность баша.
Спасибо сказали:
Аватара пользователя
Poor Fred
Сообщения: 1575
Статус: Pygoscelis papua
ОС: Gentoo Linux, FreeBSD

Re: Решено: Кавычки в bash-скрипте

Сообщение Poor Fred »

newsrc писал(а):
12.01.2010 12:12
Скрипт не работает, а именно переменная $var не раскрывается. Если вместо неё указать прямой путь, то работает.
Подскажите решение.

Заключи $var в кавычки.
Убить всех человеков!
Спасибо сказали:
Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Re: Решено: Кавычки в bash-скрипте

Сообщение newsrc »

sciko писал(а):
12.01.2010 12:17
В двойных кавычках (" ") переменные раскрываются, а в одинарных (' ') -- нет. Да, не удобно, но вот такая особенность баша.

Если в строке сделать так:

Код: Выделить всё

ssh -i $keys_dir/ssh_rsa_$hostbackup root@$hostbackup "tar czf $var `cat /root/backup_list` &> /dev/null"

Т. е. в двойных кавычках:

Код: Выделить всё

"tar czf $var `cat /root/backup_list` &> /dev/null"
то ругается cat: /root/backup_list: Нет такого файла или каталога, т. е. cat выполняется на локальной машине, а не на удалённой.

Poor Fred писал(а):
12.01.2010 12:27
newsrc писал(а):
12.01.2010 12:12
Скрипт не работает, а именно переменная $var не раскрывается. Если вместо неё указать прямой путь, то работает.
Подскажите решение.

Заключи $var в кавычки.
В двойных кавычках $var. Это тоже не работает. Ругается tar: : Cannot open: No such file or directory
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
Аватара пользователя
Poor Fred
Сообщения: 1575
Статус: Pygoscelis papua
ОС: Gentoo Linux, FreeBSD

Re: Решено: Кавычки в bash-скрипте

Сообщение Poor Fred »

newsrc писал(а):
12.01.2010 12:49
Poor Fred писал(а):
12.01.2010 12:27

Заключи $var в кавычки.
В двойных кавычках $var. Это тоже не работает. Ругается tar: : Cannot open: No such file or directory


Потому что у тебя уже есть двойные кавычки и те, которые внутри надо экранировать:

Код: Выделить всё

"tar czf \"$var\" `cat /root/backup_list` &> /dev/null"

или

Код: Выделить всё

"tar czf ""$var"" `cat /root/backup_list` &> /dev/null"
Убить всех человеков!
Спасибо сказали:
Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Re: Решено: Кавычки в bash-скрипте

Сообщение newsrc »

Потому что у тебя уже есть двойные кавычки и те, которые внутри надо экранировать:

Про двойные кавычки я написал. Если строку:

Код: Выделить всё

tar czf $var `cat /root/backup_list`
заключить в двойные кавычки, то ругается cat

$var в двойные кавычки заключал в строке, которая в одинарных кавычках, т. е. так:

Код: Выделить всё

'tar czf "$var" `cat /root/backup_list`'


Не работает. Может ещё мысли какие?
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: Кавычки в bash-скрипте

Сообщение watashiwa_daredeska »

Код: Выделить всё

ssh -i $keys_dir/ssh_rsa_$hostbackup root@$hostbackup 'tar czf '"$var"' `cat /root/backup_list` &> /dev/null'
Спасибо сказали:
Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Re: Решено: Кавычки в bash-скрипте

Сообщение newsrc »

watashiwa_daredeska писал(а):
12.01.2010 13:41

Код: Выделить всё

ssh -i $keys_dir/ssh_rsa_$hostbackup root@$hostbackup 'tar czf '"$var"' `cat /root/backup_list` &> /dev/null'

Спасибо, помогло.
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Решено: Кавычки в bash-скрипте

Сообщение t.t »

sciko писал(а):
12.01.2010 12:17
В двойных кавычках (" ") переменные раскрываются, а в одинарных (' ') -- нет. Да, не удобно, но вот такая особенность баша.
Это как раз очень удобно: в некоторых случаях раскрытие переменных в "закавыченной" строке нужно, в некоторых -- нет.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: Кавычки в bash-скрипте

Сообщение drBatty »

вот ещё один грязный хак:

Код: Выделить всё

echo -e '\x27'
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: Кавычки в bash-скрипте

Сообщение watashiwa_daredeska »

Это «башизм».
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: Кавычки в bash-скрипте

Сообщение sash-kan »

watashiwa_darede... писал(а):
14.01.2010 01:10
Это «башизм».
что именно? echo -e '\x27'?
с чего бы? найдите два отличия, как говорится:
$ /bin/echo -e '\x27'
'
$ echo -e '\x27'
'

или «башизм» — это разница в обработке разных кавычек?
что же, опять-таки, найдите два отличия:
$ sh
sh-3.2$ vat=123
sh-3.2$ echo "$vat"
123
sh-3.2$ echo '$vat'
$vat

$ zsh
% vat=123
% echo $vat
123
% echo "$vat"
123
% echo '$vat'
$vat

$ bash
$ vat=123
$ echo $vat
123
$ echo "$vat"
123
$ echo '$vat'
$vat
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
smaharbA
Сообщения: 229
ОС: Windows Vista

Re: Решено: Кавычки в bash-скрипте

Сообщение smaharbA »

поменять кавычки местами не предлагать ?
Я конечно далек от мысли...(с)
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: Кавычки в bash-скрипте

Сообщение sash-kan »

smaharbA писал(а):
25.01.2010 15:17
поменять кавычки местами не предлагать ?
это кому вопрос?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
smaharbA
Сообщения: 229
ОС: Windows Vista

Re: Решено: Кавычки в bash-скрипте

Сообщение smaharbA »

sash-kan писал(а):
25.01.2010 15:37
smaharbA писал(а):
25.01.2010 15:17
поменять кавычки местами не предлагать ?
это кому вопрос?


автору
Я конечно далек от мысли...(с)
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: Кавычки в bash-скрипте

Сообщение watashiwa_daredeska »

sash-kan писал(а):
25.01.2010 15:08
что именно? echo -e '\x27'?
Да.
sash-kan писал(а):
25.01.2010 15:08
с чего бы?
Хорошо, не башизм — GNUизм, если всегда вместо echo писать /bin/echo (echo часто встроено в shell).
The Open Group Base Specifications Issue 6; IEEE Std 1003.1, 2004 Edition
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: Кавычки в bash-скрипте

Сообщение sash-kan »

watashiwa_darede...
башизм, gnuизм…
ты так говоришь, как будто это плохо.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: Кавычки в bash-скрипте

Сообщение drBatty »

нашли о чём спорить. какая разница?
данный приём лично мне часто помогает, особенно внутри sed-скриптов. ИМХО это многим пригодится.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: Кавычки в bash-скрипте

Сообщение sash-kan »

drBatty писал(а):
25.01.2010 22:29
нашли о чём спорить.
ото ж. этим никсоидам только дай повод похоливарить…
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: Кавычки в bash-скрипте

Сообщение watashiwa_daredeska »

sash-kan писал(а):
25.01.2010 22:24
ты так говоришь, как будто это плохо.
А зачем оно, если есть эквивалентное более короткое решение? Кроме того, «echo -e» тут напрямую не применить всё равно. Надо либо лишний «$()», а это дополнительная вложенность и усложнение раскавычивания, либо вообще eval какой-нибудь, что еще хуже.

drBatty писал(а):
25.01.2010 22:29
данный приём лично мне часто помогает, особенно внутри sed-скриптов.
Именно echo -e или bash-specific $'\x27'?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: Кавычки в bash-скрипте

Сообщение drBatty »

watashiwa_darede... писал(а):
25.01.2010 22:35
Именно echo -e или bash-specific $'\x27'?

bash-spec \x27

проблема вот в чём: часто надо выводить непонятно что, причём в этом могут встретится например $. такие строки необходимо заключить в одиночные кавычки. Но что делать, если внутри этих кавычек необходимо вывести такую кавычку? \' часто не работает (кстати, в RE \' имеет специальное значение - начало буфера)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: