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

Název: Skript spustený pri starte, alebo v crone ignoruje "source"
Přispěvatel: Peterx 04 Listopadu 2019, 16:21:06
Ahoj,
Mám skript:

Kód: [Vybrat]
#! /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?


Název: Re:Skript spustený pri starte, alebo v crone ignoruje "source"
Přispěvatel: juwa2 04 Listopadu 2019, 20:21:09
Zkus použít :
Kód: [Vybrat]
sh -c "/cesta/ke/skript.sh"
jako příkaz do "Po startu" nebo Cronu.
Název: Re:Skript spustený pri starte, alebo v crone ignoruje "source"
Přispěvatel: singularis 05 Listopadu 2019, 07:40:20
Nebo zkus místo source použít příkaz „.“:

Kód: [Vybrat]
. /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:

Kód: [Vybrat]
exec 2>>/adresar/muj-logovaci-soubor.log
Název: Re:Skript spustený pri starte, alebo v crone ignoruje "source"
Přispěvatel: Peterx 05 Listopadu 2019, 11:13:13
Nebo zkus místo source použít příkaz „.“:

Kód: [Vybrat]
. /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:

Kód: [Vybrat]
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.

Kód: [Vybrat]
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:
Kód: [Vybrat]
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...
Název: Re:Skript spustený pri starte, alebo v crone ignoruje "source"
Přispěvatel: singularis 05 Listopadu 2019, 14:24:17
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í.)
Název: Re:Skript spustený pri starte, alebo v crone ignoruje "source"
Přispěvatel: Peterx 13 Listopadu 2019, 13:26:39
Dík za odpoveď, vyskúšam.