Thread View: pl.comp.lang.perl
7 messages
7 total messages
Started by Bartosz Feński aka fEnIo
Wed, 09 Dec 2009 20:07
system() i mysqldump
Author: Bartosz Feński aka fEnIo
Date: Wed, 09 Dec 2009 20:07
Date: Wed, 09 Dec 2009 20:07
50 lines
2778 bytes
2778 bytes
Hello.
Będzie pewnikiem trochę lamersko, ale sobie wykminiłem, że zrobię pierwszy
mało prowizoryczny skrypt, z configiem i w ogóle same ochy i achy.
Żeby była jasność to z Perla cudotwórca nie jestem i raczej poza
wspomaganiem się nim gdy coś w Bashu było niemożliwe lub bardzo upierdliwe
nic w nim nigdy nie pisałem.
Nawet z pomocą Config::IniFiles mi odczyt tego configa wyszedł, ale jak
próbuję przekazać te argumenty do mysqldump wywołanego przez system()
to mi to za cholerę nie chce zarobić.
To co wyczytało z configa mam w:
$dump = mysqldump
$cfg->val('baza', 'host') = localhost
$cfg->val('baza', 'user') = root
$cfg->val('baza', 'db') = baza
$cfg->val('baza', 'password') = nieistotne
No i próbuję sklecić wywołanie system():
system($dump, '-h', $cfg->val('baza', 'host'),
'-u', $cfg->val('baza', 'user'),
'-p', $cfg->val('baza', 'password'),
$cfg->val('baza', 'db'),
'> /home/backups/baza.sql');
No i skończyłem z tym, że pyta mnie o hasło.
Jak podmienię 3 linijkę na '-pnieistotne' to działa, ale chciałbym
to jednak brać z owego configa. Czyli przekazywanie argumentów
w taki sposób dowala tam spację, której mysqldump nie lubi. Da się to inaczej
wywołać czy mam sobie ten argument zbudować najpierw gdzieś na boku?
Poza tym gdy już mam wklepane owe '-pnieistotne' to z kolei kończę z:
mysqldump: Couldn't find table: " > /home/backups/baza.sql"
Czyli mój znaczek ">" jest totalnie zlewany, a raczej jakoś cudacznie
przekazywany do shella, że ten go nie traktuje jako przekierowanie.
Jak to obejść?
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: system() i mysqldump
Author: Adam Osuchowski
Date: Wed, 09 Dec 2009 20:19
Date: Wed, 09 Dec 2009 20:19
35 lines
2417 bytes
2417 bytes
Bartosz Feński aka fEnIo wrote:
> No i próbuję sklecić wywołanie system():
>
> system($dump, '-h', $cfg->val('baza', 'host'),
> '-u', $cfg->val('baza', 'user'),
> '-p', $cfg->val('baza', 'password'),
> $cfg->val('baza', 'db'),
> '> /home/backups/baza.sql');
>
> No i skończyłem z tym, że pyta mnie o hasło.
> Jak podmienię 3 linijkę na '-pnieistotne' to działa, ale chciałbym
> to jednak brać z owego configa. Czyli przekazywanie argumentów
> w taki sposób dowala tam spację, której mysqldump nie lubi. Da się to inaczej
> wywołać czy mam sobie ten argument zbudować najpierw gdzieś na boku?
>
> Poza tym gdy już mam wklepane owe '-pnieistotne' to z kolei kończę z:
>
> mysqldump: Couldn't find table: " > /home/backups/baza.sql"
>
> Czyli mój znaczek ">" jest totalnie zlewany, a raczej jakoś cudacznie
> przekazywany do shella, że ten go nie traktuje jako przekierowanie.
> Jak to obejść?
Przeczytać manual do funkcji system():
If there is more than one argument in LIST, or if LIST is an array
with more than one value, starts the program given by the first element
of the list with arguments given by the rest of the list. If there is
only one scalar argument, the argument is checked for shell metacharacters,
and if there are any, the entire argument is passed to the system's command
shell for parsing (this is "/bin/sh -c" on Unix platforms, but varies on
other platforms).
Innymi słowy, jak chcesz, żeby działały shellowe znaki specjalne,
przekaż do funkcji system() jeden argument.
Re: system() i mysqldump
Author: hubert depesz lubaczewski
Date: Wed, 09 Dec 2009 21:15
Date: Wed, 09 Dec 2009 21:15
13 lines
1064 bytes
1064 bytes
zamień to:
> '-p', $cfg->val('baza', 'password'),
na:
> '-p' . $cfg->val('baza', 'password'),
depesz
--
Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/
jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
Re: system() i mysqldump
Author: Szymon Sokół
Date: Wed, 09 Dec 2009 21:22
Date: Wed, 09 Dec 2009 21:22
30 lines
2299 bytes
2299 bytes
On Wed, 9 Dec 2009 21:07:59 +0100, Bartosz Feński aka fEnIo wrote:
> system($dump, '-h', $cfg->val('baza', 'host'),
> '-u', $cfg->val('baza', 'user'),
> '-p', $cfg->val('baza', 'password'),
> $cfg->val('baza', 'db'),
> '> /home/backups/baza.sql');
>
> No i skończyłem z tym, że pyta mnie o hasło.
> Jak podmienię 3 linijkę na '-pnieistotne' to działa, ale chciałbym
> to jednak brać z owego configa. Czyli przekazywanie argumentów
> w taki sposób dowala tam spację, której mysqldump nie lubi. Da się to inaczej
> wywołać czy mam sobie ten argument zbudować najpierw gdzieś na boku?
Ja bym to zrobił tak:
system(
sprintf('%s -h %s -u %s -p%s %s > /home/backups/baza.sql',
$dump,
$cfg->val('baza', 'host'),
$cfg->val('baza', 'user'),
$cfg->val('baza', 'password'),
$cfg->val('baza', 'db')
)
);
--
Szymon Sokół (SS316-RIPE) -- Network Manager B
Computer Center, AGH - University of Science and Technology, Cracow, Poland O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F
Free speech includes the right not to listen, if not interested -- Heinlein H
Re: system() i mysqldump
Author: Bartosz Feński aka fEnIo
Date: Wed, 09 Dec 2009 21:49
Date: Wed, 09 Dec 2009 21:49
51 lines
3112 bytes
3112 bytes
W artykule Adam Osuchowski napisał(a):
>> No i próbuję sklecić wywołanie system():
>>
>> system($dump, '-h', $cfg->val('baza', 'host'),
>> '-u', $cfg->val('baza', 'user'),
>> '-p', $cfg->val('baza', 'password'),
>> $cfg->val('baza', 'db'),
>> '> /home/backups/baza.sql');
>>
>> No i skończyłem z tym, że pyta mnie o hasło.
>> Jak podmienię 3 linijkę na '-pnieistotne' to działa, ale chciałbym
>> to jednak brać z owego configa. Czyli przekazywanie argumentów
>> w taki sposób dowala tam spację, której mysqldump nie lubi. Da się to inaczej
>> wywołać czy mam sobie ten argument zbudować najpierw gdzieś na boku?
>>
>> Poza tym gdy już mam wklepane owe '-pnieistotne' to z kolei kończę z:
>>
>> mysqldump: Couldn't find table: " > /home/backups/baza.sql"
>>
>> Czyli mój znaczek ">" jest totalnie zlewany, a raczej jakoś cudacznie
>> przekazywany do shella, że ten go nie traktuje jako przekierowanie.
>> Jak to obejść?
>
> Przeczytać manual do funkcji system():
>
> If there is more than one argument in LIST, or if LIST is an array
> with more than one value, starts the program given by the first element
> of the list with arguments given by the rest of the list. If there is
> only one scalar argument, the argument is checked for shell metacharacters,
> and if there are any, the entire argument is passed to the system's command
> shell for parsing (this is "/bin/sh -c" on Unix platforms, but varies on
> other platforms).
>
> Innymi słowy, jak chcesz, żeby działały shellowe znaki specjalne,
> przekaż do funkcji system() jeden argument.
Grrr... no czytałem to i jakoś mi do łba owe "if there is only one scalar
argument" inaczej właziło :/
Sorry. Teraz jak to czytam to rzeczywiście jakoś źle sobie to
zinterpretowałem. Dzięki.
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: system() i mysqldump
Author: Bartosz Feński aka fEnIo
Date: Thu, 10 Dec 2009 09:06
Date: Thu, 10 Dec 2009 09:06
41 lines
2471 bytes
2471 bytes
W artykule Szymon Sokół napisał(a):
>> system($dump, '-h', $cfg->val('baza', 'host'),
>> '-u', $cfg->val('baza', 'user'),
>> '-p', $cfg->val('baza', 'password'),
>> $cfg->val('baza', 'db'),
>> '> /home/backups/baza.sql');
>>
>> No i skończyłem z tym, że pyta mnie o hasło.
>> Jak podmienię 3 linijkę na '-pnieistotne' to działa, ale chciałbym
>> to jednak brać z owego configa. Czyli przekazywanie argumentów
>> w taki sposób dowala tam spację, której mysqldump nie lubi. Da się to inaczej
>> wywołać czy mam sobie ten argument zbudować najpierw gdzieś na boku?
>
> Ja bym to zrobił tak:
> system(
> sprintf('%s -h %s -u %s -p%s %s > /home/backups/baza.sql',
> $dump,
> $cfg->val('baza', 'host'),
> $cfg->val('baza', 'user'),
> $cfg->val('baza', 'password'),
> $cfg->val('baza', 'db')
> )
>);
No tak. Ciekawe czy sobie kiedyś wbiję do głowy tę elastyczność perlową ;)
Zaczynam dochodzić do wniosku, że bez jakiejś dobrej książki zmarnuję masę
czasu, bo przy okazji próbuję poskromić obiektowe podejście, które mi jakoś
nigdy nie leżało.
Dzięki wszystkim za odpowiedzi. Jestem przynajmniej krok dalej ;)
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: system() i mysqldump
Author: Bartosz Feński aka fEnIo
Date: Thu, 10 Dec 2009 09:25
Date: Thu, 10 Dec 2009 09:25
20 lines
1439 bytes
1439 bytes
W artykule hubert depesz lubaczewski napisał(a):
> zamień to:
>
>> '-p', $cfg->val('baza', 'password'),
>
> na:
>
>> '-p' . $cfg->val('baza', 'password'),
Aż mi głupio, że o konkatenacji tam nie pomyślałem :/
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads