Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.

Autor Téma: Skript spustený pri starte, alebo v crone ignoruje "source"  (Přečteno 2914 krát)

Peterx

  • Člen
  • **
  • Příspěvků: 403
    • Zobrazit profil
Skript spustený pri starte, alebo v crone ignoruje "source"
« kdy: 04 Listopad 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?



juwa2

  • Závislák
  • ****
  • Příspěvků: 3706
    • Zobrazit profil
Re:Skript spustený pri starte, alebo v crone ignoruje "source"
« Odpověď #1 kdy: 04 Listopad 2019, 20:21:09 »
Zkus použít :
Kód: [Vybrat]
sh -c "/cesta/ke/skript.sh"
jako příkaz do "Po startu" nebo Cronu.

singularis

  • Návštěvník
  • *
  • Příspěvků: 76
    • Zobrazit profil
Re:Skript spustený pri starte, alebo v crone ignoruje "source"
« Odpověď #2 kdy: 05 Listopad 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

Peterx

  • Člen
  • **
  • Příspěvků: 403
    • Zobrazit profil
Re:Skript spustený pri starte, alebo v crone ignoruje "source"
« Odpověď #3 kdy: 05 Listopad 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...

singularis

  • Návštěvník
  • *
  • Příspěvků: 76
    • Zobrazit profil
Re:Skript spustený pri starte, alebo v crone ignoruje "source"
« Odpověď #4 kdy: 05 Listopad 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í.)

Peterx

  • Člen
  • **
  • Příspěvků: 403
    • Zobrazit profil
Re:Skript spustený pri starte, alebo v crone ignoruje "source"
« Odpověď #5 kdy: 13 Listopad 2019, 13:26:39 »
Dík za odpoveď, vyskúšam.