Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: juwa2 21 Května 2018, 15:07:06

Název: Skript - akce po probuzení ze spánku - vysvětlení.
Přispěvatel: juwa2 21 Května 2018, 15:07:06
Zdravím.
Zkouším teď nové U 18.04 a potřebuji spouštět určitý skript po probuzení PC ze spánku (resume). Vím, že ve verzích 16.04+ je to jinak než dříve protože systemd.
Ve všech možných návodech které jsem našel, např. tu https://www.addictivetips.com/ubuntu-linux-tips/run-scripts-and-commands-on-suspend-and-resume-on-linux/  je tento postup.  Vytvořit spustitelný soubor
Kód: [Vybrat]
/lib/systemd/system-sleep/post-suspend
s tímto obsahem
Kód: [Vybrat]
#!/bin/sh/
if [ "${1}" == "pre" ]; then
# nothing goes here
elif [ "${1}" == "post" ]; then
sh /path/to/script.sh
fi

Bohužel to nefunguje, ani změna z #!/bin/sh/  na  #!/bin/bash/ nepomohla...
Po prozkoumání ostatních skriptů které ve složce /lib/systemd/system-sleep jsou jsem dospěl k tomuto již funkčnímu skriptu:
Kód: [Vybrat]
#!/bin/sh
set -e
if [ "$2" = "suspend" ]; then
    case "$1" in
    post) /path/to/script.sh ;;
    esac   
fi

Otázka tedy zní:  Proč skript který se uvádí ve všech návodech nefunguje?  Je to proto, že se v 18.04 zase něco změnilo"?
Nebo je chyba jinde, dosti by mě to totiž zajímalo.....

Název: Re:Skript - akce po probuzení ze spánku - vysvětlení.
Přispěvatel: GdH 21 Května 2018, 20:14:47
Jestli v tom skriptu za then nic nedáš, tak shell neočekává elif a skončí chybou. Je celkem logické, že když nepotřebuješ zjišťovat stav "pre", tak ho netestuješ. Také je v dashi třeba používat jednoduché rovnítko při porovnávání řetězců, i když bash akceptuje dvojité i v jednoduchých hranatých závorkách. Jinak jsou ty dva skripty identicky nesmyslně komplikované.
Název: Re:Skript - akce po probuzení ze spánku - vysvětlení.
Přispěvatel: juwa2 21 Května 2018, 20:46:50
Tak jsem tedy za then dal ten stejný skript
Kód: [Vybrat]
#!/bin/sh/
if [ "${1}" == "pre" ]; then
sh /path/to/script.sh
elif [ "${1}" == "post" ]; then
sh /path/to/script.sh
fi

Změna veškerá žádná...  :-[
Dále se mi nechce věřit, že by to bylo v toliko návodech na všech těch webech špatně. Proto jsem pojal podezření na nějaké změny v 18.04, protože v diskusích pod návody  si všichni svorně pochvalují jak jim to funguje, ale nikdo výslovně neuvádí že na 18.04.
A k té nesmyslné komplikovanosti.  To si netroufám posoudit, ale jak jsem viděl i spousta ostatních skriptů přímo v instalaci OS je psána takto - ostatně, řešení jsem odtud odkoukal..
Ale třeba bys tedy prosím mohl mě (a tvůrcům Ubuntu) alespoň nastínit lepší (a hlavně funkční) řešení....
Název: Re:Skript - akce po probuzení ze spánku - vysvětlení.
Přispěvatel: GdH 21 Května 2018, 21:02:19
Napsal jsem čtyři věty. Třetí jsi zřejmě přehlédl úplně, druhou nepochopil.
Název: Re:Skript - akce po probuzení ze spánku - vysvětlení.
Přispěvatel: juwa2 21 Května 2018, 21:18:36
No jo, už z toho blbnu....
Kód: [Vybrat]
#!/bin/sh
if [ "${1}" = "post" ]; then
sh /path/to/script.sh
fi

Takže viníkem bylo dvojité rovnítko. Díky.... :)
Název: Re:Skript - akce po probuzení ze spánku - vysvětlení.
Přispěvatel: West 21 Května 2018, 21:54:43
V niektorych pripadoch zrejme vadi porovnavanie dvoma rovnitkami. Tiez som na to narazil pri pisani skriptov. Pri pouziti jedneho rovnitka to fungovalo, pri pouziti dvoch bola podmienka chybne vyhodnotena. Zatial som sa nedokopal k analyzovaniu problemu kedy to funguje a kedy nie. Je mozne, ze to nefunguje len za urcitych podmienok. Napada ma neuvodzovanie argumentov, na obidvoch stanach, ci len na jednej, alebo druhej strane. Moznosti je samozrejme viac.