Portál AbcLinuxu, 13. května 2025 23:26

Dotaz: Bash script, ktery se spousti v sh

17.12.2010 22:31 ehy | skóre: 1
Bash script, ktery se spousti v sh
Přečteno: 364×
Odpovědět | Admin
Dobry den, mam jednoduchy script, ktery funguje jen na prvni spusteni. Spusti se spravne v bash. Script obsahuje na konci prikaz 'at' kde vola sam sebe. Jenze 'at' spousti script v sh coz mi nevyhovuje, protoze tam je jina syntax.
script je v souboru aaa.sh
#!/bin/bash
COUNTER=0
echo "COUNTER : [$COUNTER]">>log.txt
let COUNTER=COUNTER+1
echo "COUNTER : [$COUNTER]">>log.txt
let COUNTER=COUNTER+1
echo "COUNTER : [$COUNTER]">>log.txt
let COUNTER=COUNTER+1
echo "COUNTER : [$COUNTER]">>log.txt

echo "SET $(date)">>log.txt

at -f "aaa.sh" now+1minutes

echo "NEW: $(atq)">>log.txt
exit


Chtel bych poradit jak resit tento problem. (asi existuje nejaky zpusob jak zarucit spousteni v bash)
ps.: script vypisuje upozorneni :
warning: commands will be executed using /bin/sh
Diky

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (ehy (tazatel))
17.12.2010 23:02 Sten
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
Odpovědět | | Sbalit | Link | Blokovat | Admin
[ -n "$BASH" ] || exec /bin/bash $0
18.12.2010 00:19 ehy | skóre: 1
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
diky ... vyzkousim to
Napadlo me, ze kdyz spoustim stejny script mohl bych tento script pouze uspat prikazem sleep.
18.12.2010 03:05 ehy | skóre: 1
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
tak nevim jak jste to myslel, ale tohle nefunguje :
at -n "$BASH" -f "aaa.sh" now+1minutes
-naznamy parameter -n
at -f "exec /bin/bash $0" now+1minutes
-nemuze najit cestu (bez parametru -f to zase pise syntax err)
--------------------------------------------------------------------
jinak jsem to vyresil tak, ze spustim pomocny soubor kde volam ten exec jak jste mi radil (moc elegantni to ale neni :( ) :
at -f "startBash.sh" now+1minutes
v souboru startBash.sh mam:
#!/bin/bash
exec bash aaa.sh
Chytrex avatar 18.12.2010 03:18 Chytrex | skóre: 30 | Bohumín
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
No pokud se nepletu tak to co napsal sten je přesně syntax který ověří zda existuje bash, a pokud tedy ano, tak spustí sebe sama znovu. $0 je IIRC proměnná s názvem právě probíhajícího scriptu.
Hrdý člen KERNEL ULTRAS .:. define QUESTION ((bb) || !(bb)) .:. Odmítám vaši realitu a nahrazuji ji svou vlastní..
18.12.2010 03:51 ehy | skóre: 1
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
mas pravdu je to cely prikaz :)
ja jsem si neuvedomil, ze by prikaz mohl vypadat taky takto :)
ovsem je tam chybka :
ten $0 vraci :"sh"
$1 a $2 jsou prazdne :( tak nevim kde je schovane to jmeno spusteneho scriptu

Takze reseni v tuto chvili mam :
radek 1:[ -n "$BASH" ] || exec /bin/bash aaa.sh "
17.12.2010 23:17 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
Odpovědět | | Sbalit | Link | Blokovat | Admin
+ si pozri, k comu sluzi cron.
If you hold a Unix shell up to your ear, you can you hear the C.
18.12.2010 00:14 ehy | skóre: 1
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
Nad cronem jsem premyslel jako prvni, ale potrebuji aby dalsi spusteni scriptu bylo za presny cas od jeho ukonceni. (doba vykonavani scriptu neni vzdy stejna) Ale cron nabizi "jen" periodicke opakovani spusteni v danny cas.
Pro me by bylo vyhodne, kdybych mohl cron zavolat s nejakym parametrem "only once" a samozrejme cas vykonavani.
Jestli cron dobre znate muzete mi poradit v tomto smeru ...
Diky
18.12.2010 00:35 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
To neviem, to asi ten "at", ale toto riesenie bude krehke v tom, ze ak ten skript spadne z nejakeho dovodu a nenaplanuje svoj dalsi beh, tak uz sa sam nenahodi.

Ak staci nejaka granularita casu po minutach, tak mozes do cronu hodit tento skript a v nejakom subore si skladovat datum posledneho jeho dobehu. Skript sa pozrie, ci uz uplynula pozadovana doba a bud skonci, alebo ide robit tu hlavnu akciu. Na konci prepise subor s casom. Ak by spadol pocas hlavnej akcie, tak sa subor neprepise a o minutu sa to skusi znova.

Ak hlavna akcia moze trvat aj dlhsie ako minutu, tak bud zmenis granularitu, alebo si este zavedies subor, do kt. budes zapisovat aj datum nastartovania skriptu a na konci skriptu ho budes mazat - aby nebezali 2 hlavne skripty sucasne.
If you hold a Unix shell up to your ear, you can you hear the C.
18.12.2010 00:38 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
Odpovědět | | Sbalit | Link | Blokovat | Admin
Spustenim
bash skript.sh
zarucis jeho beh v bashi.
If you hold a Unix shell up to your ear, you can you hear the C.
18.12.2010 03:10 ehy | skóre: 1
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
to ano, ale nedokazu ho dostat do toho "at" prikazu. Uz jsem to psal jako odpoved Stenovi, reseni jsem nasel, ale neni moc hezke :(
Řešení 1× (ehy (tazatel))
18.12.2010 12:03 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
co takto
echo 'bash -c aaa.sh' | at now+1minutes
If you hold a Unix shell up to your ear, you can you hear the C.
pavlix avatar 18.12.2010 13:42 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Bash script, ktery se spousti v sh
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud má skript něco dělat v různých časových intervalech, doporučil bych z něj udělat démona a používat sleep (čekání s přesností na vteřiny).

Pak ho stačí jednou spustit a nechat běžet.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.

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.