Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Peterx 04 Listopadu 2019, 16:21:06
-
Ahoj,
Mám skript:
#! /bin/bash
source /adresar/zdroj.sh #obsahuje premenne a funkcie
prikaz1
prikaz2
Skript aj "zdroj.sh" je spustiteľný, čitateľný a zapisovateľný pre každého.
Skript funguje skvele, avšak ak ho dám spustiť pri štarte, alebo do cronu, akoby ignoruje "source /adresar/zdroj.sh" a nenačíta z neho ani premenné, ani funkcie.
Viete niekto poradiť čo robím zle?
-
Zkus použít :
sh -c "/cesta/ke/skript.sh"
jako příkaz do "Po startu" nebo Cronu.
-
Nebo zkus místo source použít příkaz „.“:
. /adresar/zdroj.sh #obsahuje premenne a funkcie
Pokud se ten skript omylem spouští v sh místo v bashi, sh příkaz „source“ nepodporuje, ale příkaz „.“ ano. Pokud se tím problém vyřeší, stálo by možná za to vyšetřit, proč se skript spouští v sh a ne v bashi.
A ještě jeden tip: na začátek skriptu (pod #!/bin/bash) můžeš dočasně přidat tento příkaz, kterým přesměruješ chybová hlášení do souboru a ten soubor pak můžeš sledovat; možná se do něj zapíše hlášení, které ti pomůže zjistit, co se děje:
exec 2>>/adresar/muj-logovaci-soubor.log
-
Nebo zkus místo source použít příkaz „.“:
. /adresar/zdroj.sh #obsahuje premenne a funkcie
Pokud se ten skript omylem spouští v sh místo v bashi, sh příkaz „source“ nepodporuje, ale příkaz „.“ ano. Pokud se tím problém vyřeší, stálo by možná za to vyšetřit, proč se skript spouští v sh a ne v bashi.
A ještě jeden tip: na začátek skriptu (pod #!/bin/bash) můžeš dočasně přidat tento příkaz, kterým přesměruješ chybová hlášení do souboru a ten soubor pak můžeš sledovat; možná se do něj zapíše hlášení, které ti pomůže zjistit, co se děje:
exec 2>>/adresar/muj-logovaci-soubor.log
Toto pomohlo, ďakujem už to spúšťa, zasekol som sa však na ďalšom probléme ktorý pri ručnom spustení nemám.
funkcia1 ()
{
premenna1=$(cat subor)
echo premenna1 > subor #na kontrolu ci nacitalo dobre premennu, ta je ale ok
if [ "$premenna1" == "abc" ]
then prikaz...atd...
}
Keď som pridal toto:
exec 2>>/adresar/muj-logovaci-soubor.log
tak v logu nájdem: zdroj.sh: 163: [: abc: unexpected operator # abc je hodnota premennej
ak by mal niekto nejaký nápad...
-
To už je drobnost, stačí nahradit „==“ za „=“, protože zrovna v tomto příkazu tam patří jen jedno =. (Viz „man test“, v té manuálové stránce je výčet všech podporovaných možností.)
-
Dík za odpoveď, vyskúšam.