Portál AbcLinuxu, 23. dubna 2024 15:41


Dotaz: Spouštění příkazů ze souboru

18.2.2005 10:30 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Spouštění příkazů ze souboru
Přečteno: 400×
Odpovědět | Admin
Je možné mít seznam příkazů v souboru, který se bude postupně číst a provádět? Něco jako
perl program1.pl
perl program2.pl
python program3.pl
java Main
...
a ve skriptu jednotlivé příkazy spouštět nějak takto
for cmd in `cat commands`
do
  /usr/bin/time -pao time.log $cmd
done
Takto to samozřejmě nefunguje, protože se vystup rozdělí podle mezer a provádí se perl, program1.pl, perl, program2.pl ... Zkoušel jsem použít i uvozovky a apostrofy, ale nic z toho mi nepracovalo.
When your hammer is C++, everything begins to look like a thumb.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.2.2005 10:44 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Normáln2 bych pro zpracování příkazů ze souboru použil source soubor, ale ten time mi tam nějak nesedí. Pokud trvas na time, tak bych to asi udělal takhle: while read prikaz; do time $prikaz; done < /tmp/soubor_s_prikazy
-- Nezdar není hanbou, hanbou je strach z pokusu.
18.2.2005 11:03 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Díky, stydím se, že mě nenapadl read a přeměrování. Jde mi totiž o to, že když budu potřebovat příkazy spouštět v nějaké složitější koloně, tak abych změnu mohl udělat na jednom místě a nemusel procházet jednotlivé skripty a tam to měnit!
When your hammer is C++, everything begins to look like a thumb.
18.2.2005 10:51 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
No jistě! Toto je velká část kouzla Linuxu a podobných systémů. Na začátku souboru musí být
#!/bin/bash
a když má potom soubor práva x (spouštění), což provedete třeba takto:
chmod a+x mujsoubor
tak potom stačí napsat
./mujsoubor
a provede se vše co je v něm. Bez práv spuštění a bez toho #!interpreter bys ho musel spouštět třeba pomocí bash mujsoubor.

Existuje spousta dalších interpreterů:

Mno a ten for by měl vypadat zhruba takhle, ale nevím, to poradí někdo jiný:
for cmd in `cat commands`;
do
  /usr/bin/time -pao time.log $cmd
done;

O bashi myslím tu byly nějaké seriály, tak se koukni.

.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
18.2.2005 10:55 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Takto to samozřejmě nefunguje, protože se vystup rozdělí podle mezer a provádí se perl, program1.pl, perl, program2.pl ... Zkoušel jsem použít i uvozovky a apostrofy, ale nic z toho mi nepracovalo.
Ha. to tam dřív nebylo, nebo su ještě rozespalej, ale možná vám pomůže i můj příspěvek.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
18.2.2005 10:53 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
sed 's:^:/usr/bin/time -pao time.log :' commands | sh
Jinak na slova to rozdělí `cat cmd` (příspěvek do soutěže o nejzbytečnější cat?), po řádcích bys to mohl číst read nebo hrátkami s IFS.
18.2.2005 11:08 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Tohle je také moc pěkné! Kruci, to jsem si myslel, že už shellu rozumím, ale tohle mě fakt nenapadlo:-(. Musím se ještě hodně učit!
When your hammer is C++, everything begins to look like a thumb.
18.2.2005 12:45 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jestli v tom souboru nejsou žádné shellové konstrukce, tak by stačilo
xargs -l /usr/bin/time -pao time.log <commands
18.2.2005 13:25 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Ještě bych upozornil, že ty řádky nesmí mít mezeru nebo tabelátor na konci. A co je nejhorší, tak time je interní příkaz bashe, takže to nebude fungovat.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
18.2.2005 13:39 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
time mi moc jako interní příkaz bashe nepřipadá: [tsunami@vodik]$ file /usr/bin/time
/usr/bin/time: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
-- Nezdar není hanbou, hanbou je strach z pokusu.
18.2.2005 14:49 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Time je built-in prikaz v bash, ksh, csh a tcsh (zsh nevim, protoze ho tady na FreeBSD nemame nainstalovany). Klasicky sh (pozor na Linuxu se vetsinou jedna o symlink na bash) time nema a proto spousti usr/bin/time. Dukaz je jednoduchy:
[bash/ksh]$ /usr/bin/time
[bash/ksh]$ time

real    0m0.000s
user    0m0.000s
sys     0m0.000s
[csh/tcsh]% /usr/bin/time
[csh/tcsh]% time
0.003u 0.010s 0:23.87 0.0%      1192+1292k 0+0io 0pf+0w

[sh]$ /usr/bin/time
[sh]$ time
Nejprve jsem si myslel, ze bash predava /usr/bin/time formatovaci string a parametr -p, ale zkuste si napsat time -pao time.log v bashi a dostanete chybu -ksh: -pao: command not found, zatimco v sh probehne vse normalne.
When your hammer is C++, everything begins to look like a thumb.
18.2.2005 16:21 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
je to se mnou tezke, kdyz mam v .bashrc alias time="/usr/bin/time" a nevim o tom :-)
-- Nezdar není hanbou, hanbou je strach z pokusu.
18.2.2005 17:55 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
$ find ${PATH//:/ } -name time -maxdepth 1
$
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
18.2.2005 18:26 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Na běžném systému je /usr/bin/time, stejně tak /bin/true, /bin/test, /bin/kill atd. Když si něco z toho odinstaluješ...
18.2.2005 18:35 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Spouštění příkazů ze souboru
Ač jsem od vynálezu /media na LSB dost zanevřel, tak existence time je předepsána LSB. Máte-li někde nějaký RH, tak rpm -q --requires redhat-lsb je poučné...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.