Sociální síti 𝕏 (dříve Twitter) má dnes 20 let. Pro veřejnost byla zpřístupněna 15. července 2006.
Insula Faktury je open source generátor faktur, který běží přímo ve webovém prohlížeči. Žádná registrace, žádné sledování, žádné omezení. Zdrojové kódy jsou k dispozici na Codebergu.
První Mobile Linux Hackday v Plzni, tj. komunitní setkání věnované Linuxu na mobilních zařízeních, proběhne 24. července od 10:00. Akce je otevřená všem zájemcům – od zvědavců po zkušené vývojáře. Dopoledne proběhnou přednášky Davida Heidelberga a Petra Hodiny o aktuálním stavu mobilního Linuxu: proč vůbec chtít tučňáka v kapse, jaké telefony jsou dnes dobře podporované a co taková podpora obnáší. Po obědě se zaměříme na konkrétní
… více »3D software Blender byl vydán ve verzi 5.2 s prodlouženou podporou. Videopředstavení na YouTube.
SketchForge 3D (GitHub, reddit) je open source 3D editor / CAD běžící ve webovém prohlížeči bez nutnosti účtu nebo cloudového úložiště. Inspirovaný byl Tinkercadem. Doporučena je lokální instalace.
Byla vydána nová verze 11.9 webového prohlížeče Midori (Wikipedie, GitHub). S novým centrem ovládání, pokročilejším blokováním reklam, optimalizací výkonu…
Na Crowd Supply běží kampaň na podporu open source čtečky elektronických knih Open Book Touch. Postavena je na ESP32-S3. Má 4,26palcový dotykový e-papírový displej s rozlišením 480×800 pixelů, podsvícení, slot na microSD kartu. Cena je 149 dolarů a poštovné 12 dolarů. Dodání je plánováno na duben 2027.
Na Humble Bundle běží akce Linux: All the Things by O'Reilly a Picos, HATs, and More by Raspberry Pi Press. Elektronické knihy lze koupit se slevou a současně podpořit organizace Code for America a Raspberry Pi Foundation.
FreeCAD (Wikipedie), tj. svobodný multiplatformní parametrický 3D CAD, má nový vtipný a současně užitečný doplněk Banana For Scale (GitHub). Aktuálně umožňuje do výkresu vložit banán nebo plechovku pro porovnání a určení měřítka.
Blender Studio nedávno oznámilo plán vytvořit svůj první otevřený (open source) celovečerní film. Film by se měl jmenovat Overgrown (YouTube). Film vznikne, pokud se zajistí financování. Prvním krokem je získat 7 000 předplatitelů Blender Studia. Cena je od 11,50 eur měsíčně. Aktuálně počet předplatitelů je 5 289. Předplatné pokryje 20 % nákladů. Zbytek, 80 % nákladů, má být financován externími producenty nebo distributory.
Příkaz at slouží k naplánování pozdějšího spuštění příkazů. Anglický název příkazu v tomto kontextu překládáme jako předložku „v“ (ve významu v kolik hodin).
Implementace v Unix-like systémech obvykle sestává ze služby (démona) atd a uživatelského příkazu at. Služba běží neustále a spouští naplánované úlohy, když přijde čas. Tím se uživatel nemusí zabývat. Podstatné je pro nás, jak to naplánovat. Proto si popíšeme použití příkazu at.
Ve výchozím režimu čte at seznam příkazů, které má spustit, ze standardního vstupu (stdin) a jako argument očekává čas, kdy je má spustit. Chceme-li tedy spustit příkaz pokus přesně za hodinu, můžeme to naplánovat takto:
echo pokus | at now + 1 hour
Tím jsme si ukázali, že čas spuštění lze zadávat i relativně. Zadávání času spuštění je velice obecné a když si vymyslíte něco, co dává aspoň trochu smysl, at to pravděpodobně pochopí.
# spustí ,echo $USER >> /tmp/users‘ zítra v 18:00 echo 'echo $USER >> /tmp/users' | at 1800 tomorrow # spustí ,paludis -s‘ v 17:00 (pokud tento čas ještě nenastal, tak dnes, jinak zítra) echo 'paludis -s' | at 17:00 # spustí zadané příkazy 20. července v 17:00 at 5pm jul 20 <<! updatedb sync !
Přepínač -f umožňuje zadat cestu k souboru obsahujícímu seznam příkazů, jejichž spuštění má at naplánovat. Místo standardního vstupu se tedy čte z daného souboru.
# spustí příkazy ze souboru za týden v tento čas at -f soubor.at next week
Přepínač -m zajistí odeslání e-mailu danému uživateli po dokončení jeho příkazů. Pokud výstup příkazů nebyl přesměrován jinam, bude přiložen v e-mailu.
Nyní bych se měl zmínit o frontách a manipulaci s nimi. Všechna dosavadní ukázková volání příkazu at přidávají příkazy do výchozí fronty (zvané „a“). Chceme-li vypsat seznam položek ve frontě, použijeme přepínač -l (a chceme-li vypsat jinou frontu než výchozí, tak ještě -q).
# přidá daný příkaz do fronty „x“ echo lsmod | at -m -q x now + 1 minute # vypíše položky všech front at -l # vypíše položky fronty zvané „x“ at -l -q x
Další věc je odebírání položek z fronty. Když se spleteme a naplánujeme nesmysl nebo si časem rozmyslíme spouštění dané věci, tak se bude hodit přepínač -r. Problém je, že verze at, která je obvykle k nalezení na linuxových systémech, se zde trochu rozchází se standardem Single UNIX Specification a žádný přepínač -r nemá. Používáme proto příkaz atrm, kterému zadáme ID položek, jež chceme z fronty smazat. ID položek zjistíme výše zmiňovaným příkazem at -l (příp. nestandardně pomocí atq).
# smaže z fronty položky s ID 10, 12 a 15 atrm 10 12 15
Mimochodem, Windows NT/2000/XP/7 mají také příkaz at (podobný cronu), ten je ovšem zastaralý – nahradil jej schtasks (resp. GUI nadstavba Task Scheduler).
Program sleep nedělá nic (čeká) po uživatelem danou dobu. Název vychází z anglického slova, které v překladu znamená „spát“.
Nezasvěcenému uživateli se takový popis může zdát zvláštní a řekne si: „K čemu je příkaz, který nic nedělá?“ Představte si kupříkladu situaci, kdy je třeba spouštět nějaký příkaz každých 10 minut. Vyřešit to lze takto:
while true; do příkaz sleep 600 # čas v sekundách done
Chceme-li třeba za 15 sekund ukončit proces X serveru (to se někdy hodí při řešení problémů se vstupními zařízeními), můžeme také použít sleep:
# za 15 sekund pošle signál SIGKILL všem běžícím instancím X serveru sleep 15 ; killall -9 X
Tolik k praktickému využití. Ještě by se slušelo zmínit, že verze programu sleep, se kterou se setkáte, se může (a pravděpodobně bude) lišit od té standardní (dle SUS). Standard totiž říká, že program by měl pracovat s jedním celočíselným nezáporným argumentem, který udává, kolik sekund se má čekat. Jenže třeba sleep z GNU coreutils podporuje i zadávání minut, hodin a dnů (připojením písmene „m“, „h“ nebo „d“ za číslo). Další odlišností této verze je možnost zadat desetinné číslo.
# spí 1 den, 5 hodin, 2 minuty, 10 sekund, 200 milisekund sleep 1d 5h 2m 10.2s # spí 6 sekund a 300 milisekund sleep 0.1m 0.3s
Příkaz wait čeká, dokud se neukončí proces s daným PID běžící na pozadí daného shellu a poté se sám ukončí. Název programu je opět anglické slovo, která znamená „čekat“.
Jak jsem naznačil, wait umí čekat pouze na procesy spuštěné na pozadí shellu, ze kterého wait spouštíme. Předvedeme si spuštění programu na pozadí:
sleep 100 &
Představte si, že jsme místo programu sleep spustili na pozadí něco smysluplného. Teď když spustíme wait bez argumentů, tak bude čekat na ukončení všech procesů běžících na pozadí shellu. Když jako argumenty zadáme jednotlivé PID, bude se čekat pouze na jim odpovídající procesy. Pokud proces s daným PID neexistuje, wait by se měl chovat jako kdyby proces existoval a okamžitě vracel návratovou hodnotu 127. Návratová hodnota programu je obecně ta, kterou vrátí proces, jehož PID je uvedeno jako poslední v seznamu argumentů. Je-li spuštěn bez argumentů, vrací 0.
V Bashi se PID posledního procesu spuštěného na pozadí shellu uchovává v proměnné $!, takže lze provést následující:
lame --decode nejaka.mp3 nejaky.wav &> /dev/null & echo -n "Převádím MP3 na WAV… " wait $! && echo "OK" || echo 'chyba!'
V praxi se tento příkaz používá převážně neinteraktivně, tedy ve skriptech.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
while sleep x; do ...; done
while true. Kdyby tam byl nekonečný for, tedy for((;;)), tak by to bylo o něčem jiném.
for((;;)) občas nebyla sranda a musel jsem držet ctrl+c, zatímco u while true to stačilo jen zmáčknout.
Teď sem si i uvědomil že jsem reagoval docela zcestně na tvůj původní komentář, takže si mě radši nevšímej
lame --decode nejaka.mp3 nejaky.wav &> /dev/null & echo -n "Převádím MP3 na WAV… " wait $! && echo "OK" || echo 'chyba!'tohle je blbost $! vrati pid prikazu echo .... spravne melo byt
lame --decode nejaka.mp3 nejaky.wav &> /dev/null & PID=$! ... echo -n "Převádím MP3 na WAV… " wait $PID && echo "OK" || echo 'chyba!'
$! obsahuje ID procesu, který byl naposledy spuštěn na pozadí (tedy s &).
echo -n Převádím... lame ... >/dev/null && echo hotovo || echo chybaTedy alespoň pokud není třeba dělat mezitím něco dalšího.
wait $! && echo "OK" || echo 'chyba!' protože to je wait $! && (echo "OK" || echo 'chyba!') nikoliv "klasické" if then else wait $! && (echo "OK") || (echo 'chyba!')takže teoreticky pokud selže echo OK, objeví se "chyba!", ovšem nikoliv chyba v převodu mp3, ale chyba ve výpisu na obrazovku, což nemusí být to, co autor zamýšlel. V praxi echo OK většinou neselže, ale nepřipadá mi vhodné to takto psát...
Problém je, že verze at, která je obvykle k nalezení na linuxových systémech, se zde trochu rozchází se standardem Single UNIX Specification a žádný přepínač -r nemá.
Až tak obvyklé to nebude - v SuSE ho podporuje, v Red Hatu ho podporuje, ve Slackware IIRC taky (nebo aspoň podporovala, když jsem ho používal). Vlastně si nevzpomínám na žádnou konkrétní distribuci, kde by defaultní implementace at přepínač -r nepodporovala.