На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
newsrc
Сообщения: 314
ОС: Slackware
Сообщение
newsrc » 12.01.2010 12:12
Стыдно, но всё же:
Код: Выделить всё
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
Сообщение
sciko » 12.01.2010 12:17
В двойных кавычках (" ") переменные раскрываются, а в одинарных (' ') -- нет. Да, не удобно, но вот такая особенность баша.
Poor Fred
Сообщения: 1575
Статус: Pygoscelis papua
ОС: Gentoo Linux, FreeBSD
Сообщение
Poor Fred » 12.01.2010 12:27
newsrc писал(а): ↑ 12.01.2010 12:12
Скрипт не работает, а именно переменная
$var не раскрывается. Если вместо неё указать прямой путь, то работает.
Подскажите решение.
Заключи $var в кавычки.
Убить всех человеков!
newsrc
Сообщения: 314
ОС: Slackware
Сообщение
newsrc » 12.01.2010 12:49
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
Сообщение
Poor Fred » 12.01.2010 12:57
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
Сообщение
newsrc » 12.01.2010 13:07
Потому что у тебя уже есть двойные кавычки и те, которые внутри надо экранировать:
Про двойные кавычки я написал. Если строку:
заключить в двойные кавычки, то ругается
cat
$var в двойные кавычки заключал в строке, которая в одинарных кавычках, т. е. так:
Не работает. Может ещё мысли какие?
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux
Сообщение
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'
newsrc
Сообщения: 314
ОС: Slackware
Сообщение
newsrc » 12.01.2010 13:58
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
Сообщение
t.t » 12.01.2010 16:38
sciko писал(а): ↑ 12.01.2010 12:17
В двойных кавычках (" ") переменные раскрываются, а в одинарных (' ') -- нет. Да, не удобно, но вот такая особенность баша.
Это как раз очень удобно: в некоторых случаях раскрытие переменных в "закавыченной" строке нужно, в некоторых -- нет.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 13.01.2010 21:48
вот ещё один грязный хак:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux
Сообщение
watashiwa_daredeska » 14.01.2010 01:10
Это «башизм».
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 25.01.2010 15:08
что именно? 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
smaharbA
Сообщения: 229
ОС: Windows Vista
Сообщение
smaharbA » 25.01.2010 15:17
поменять кавычки местами не предлагать ?
Я конечно далек от мысли...(с)
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 25.01.2010 15:37
smaharbA писал(а): ↑ 25.01.2010 15:17
поменять кавычки местами не предлагать ?
это кому вопрос?
smaharbA
Сообщения: 229
ОС: Windows Vista
Сообщение
smaharbA » 25.01.2010 15:42
sash-kan писал(а): ↑ 25.01.2010 15:37
smaharbA писал(а): ↑ 25.01.2010 15:17
поменять кавычки местами не предлагать ?
это кому вопрос?
автору
Я конечно далек от мысли...(с)
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 25.01.2010 22:24
watashiwa_darede...
башизм, gnuизм…
ты так говоришь, как будто это плохо.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 25.01.2010 22:29
нашли о чём спорить. какая разница?
данный приём лично мне часто помогает, особенно внутри sed-скриптов. ИМХО это многим пригодится.
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 25.01.2010 22:31
drBatty писал(а): ↑ 25.01.2010 22:29
нашли о чём спорить.
ото ж. этим никсоидам только дай повод похоливарить…
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux
Сообщение
watashiwa_daredeska » 25.01.2010 22:35
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
Сообщение
drBatty » 25.01.2010 23:42
bash-spec \x27
проблема вот в чём: часто надо выводить непонятно что, причём в этом могут встретится например $. такие строки необходимо заключить в одиночные кавычки. Но что делать, если внутри этих кавычек необходимо вывести такую кавычку? \' часто не работает (кстати, в RE \' имеет специальное значение - начало буфера)