Byl představen editor MonoSketch, webová aplikace pro tvorbu diagramů, technických nákresů, flowchartů a různých dalších vizualizací, to vše jenom z ASCII znaků. Všechny operace běží pouze v prohlížeči uživatele a neprobíhá tedy žádné nahrávání dat na server. Zdrojový kód aplikace (drtivá většina Kotlin, žádné C#) je dostupný na GitHubu pod licencí Apache 2.0.
Byla vydána nová verze 3.7.0 multiplatformního svobodného frameworku pro zpracování obrazu G'MIC (GREYC's Magic for Image Computing, Wikipedie). Přehled novinek i s náhledy nových filtrů na PIXLS.US.
Všem na AbcLinuxu vše nejlepší k Valentýnu aneb Dni lásky ke svobodnému softwaru (I love Free Software Day, Mastodon, 𝕏).
Eric Migicovsky představil Pebble Emulator, tj. emulátor hodinek Pebble (PebbleOS) běžící ve webovém prohlížeči. Za 6 hodin jej napsal Claude Code. Zdrojové kódy jsou k dispozici na GitHubu.
Byla vydána nová verze 3.41 frameworku Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací a nová verze 3.11 souvisejícího programovacího jazyka Dart (Wikipedie).
Rusko zcela zablokovalo komunikační platformu WhatsApp, řekl včera mluvčí Kremlu Dmitrij Peskov. Aplikace, jejímž vlastníkem je americká společnost Meta Platforms a která má v Rusku na 100 milionů uživatelů, podle Peskova nedodržovala ruské zákony. Mluvčí zároveň lidem v Rusku doporučil, aby začali používat domácí aplikaci MAX. Kritici tvrdí, že tato aplikace ruské vládě umožňuje lidi sledovat, což úřady popírají.
Před 34 lety, ve čtvrtek 13. února 1992, se tehdejší Česká a Slovenská Federativní Republika oficiálně (a slavnostně) připojila k Internetu.
Agent umělé inteligence vytvořil 'útočný' článek o Scottu Shambaughovi, dobrovolném správci knihovny matplotlib, poté, co vývojář odmítl agentem navrženou změnu kódu (pull request). 'Uražený' agent autonomně sepsal a publikoval na svém blogu článek, který přisuzuje Shambaughovi smyšlené motivace, egoismus a strach z AI coby konkurence.
Bylo vydáno Ubuntu 24.04.4 LTS, tj. čtvrté opravné vydání Ubuntu 24.04 LTS s kódovým názvem Noble Numbat. Přehled novinek a oprav na Discourse.
V pátek 20. února 2026 se v pražské kanceláři SUSE v Karlíně uskuteční 6. Mobile Linux Hackday, komunitní setkání zaměřené na Linux na mobilních zařízeních, kernelový vývoj a uživatelský prostor. Akce proběhne od 10:00 do večera. Hackday je určen všem, kteří si chtějí prakticky vyzkoušet práci s linuxovým jádrem i uživatelským prostorem, od posílání patchů například pomocí nástroje b4, přes balíčkování a Flatpak až po drobné úpravy
… více »Kopie root@vzdalenypocitac cp /adresar/soubor /cilNo a potřeboval bych napsat skript, který to projde a na vzdáleném PC spustí daný příkaz. Skript napsaný níže by fungoval, kdyby... - když to nechám takto použije read standardní oddělovač a v proměnné $command mám jen "cp" namísto "cp /adresar/soubor /cil" - když definuju proměnnou IFS=";" (a použiju v cfg souboru jako oddělovač ;), tak to píše chybu: ./sript.sh: line 45: ssh root@vzalenypocitac: command not found Poradí někdo co s tím? (Netrvám na použití příkazu read, nic lepšího jsem ale stvořit nedokázal. Ve smyčce cyklu se toho bude provádět více (další dotazy, kontrola))
#!/bin/bash
Config=${0%.*}.cfg
echo $Config
#IFS=;
grep -v "^#" $Config | while read label remoteuser command
do
echo $label
sshcmd="ssh $remoteuser"
cmd="$($sshcmd $command; exit)"
done
Řešení dotazu:
Kopie root@vzdalenypocitac "cp /adresar/soubor /cil"
IFS=';', zkuste si dát IFS=' ' před cmd="$($sshcmd $command; exit)".
…samozřejmě to nevyřeší zadání, jen to provede první řádek…
. Zkoušel jsem to, ale ne...
Jinak k řešení: Ten ssh se vlastně spouští v další instanci bashe, takže stačí ten IFS=" " dát před $sshcmd. Po ukončení se vrátí ta předchozí hodnota.
Nicméně nejlepší by bylo upravit algoritmus. Je vůbec potřeba oddělovat středníkama? Myslím, že mezery fungujou taky dobře
. Každopádně by šlo převíst ten soubor na mezery ještě před zpracováním. Tedy něco jako sed "s/;/ /g".
.
Btw bylo by to docela triviální s regulárním výrazem v perlu. Ale jestli umí grep nebo sed ukládat nalezený patterny do shellových proměnných, to fakt nevím.
IFS=";", ale ve skriptu máte IFS=; (navíc zakomentované), což udělá něco úplně jiného. Takže pokud chcete poradit, dejte sem skript, vstup a chybovou hlášku, které si odpovídají. Nemusejí to samozřejmě být ostrá (a citlivá) data, ale mělo by to být něco, na čem lze chybu reprodukovat.
while read line; do set -- $line label="$1" remoteuser="$2" shift 2 command="$*" ... done < $Config
#!/bin/bash
Config=1.cfg
#IFS=";"
grep -v "^#" $Config | while read label remoteuser command2 command3
do
command="mkdir /test"
echo $command
echo $command2
echo $command3
sshcmd="ssh $remoteuser"
cmd1="$($sshcmd $command; exit)"
cmd2="$($sshcmd $command2; exit)"
cmd2="$($sshcmd $command3; exit)"
done
A mám dva konfigurační soubory ve stejném adresáři (1.cfg oddělený tabulátory, 2.cfg oddělený středníky), ale oba obsahují stejná data:
uloha1 root@vzdalenypocitac touch /test/test.txt cp /test/test.txt /test/test_copy.txtKdyž použiju Config=1.cfg a zakomentuju $IFS=";", tak se sice načtou proměnné command2 a command3 špatně, ale aspoň ten natvrdo napsaný $command (mkdir /test) se provede:
mkdir /test touch /test/test.txt cp /test/test.txt /test/test_copy.txt touch: missing file operand Try `touch --help' for more information. bash: /test/test.txt: No such file or directoryKdyž použiju Config=2.cfg a použiju $IFS=";", tak mám sice nádherně načtené proměnné ze souboru, ale nic se neprovede. Nic!
mkdir /test touch /test/test.txt cp /test/test.txt /test/test_copy.txt ./dotaz.sh: line 11: ssh root@cz-brn1-ssm: command not found ./dotaz.sh: line 12: ssh root@cz-brn1-ssm: command not found ./dotaz.sh: line 13: ssh root@cz-brn1-ssm: command not foundA nepomůže ani, když v konfiguračním souboru dám jednotlivé řetězce do uvozovek, když nedefinuju IFS, tak to bere za oddělovače i mezery uvnitř uvozovek. Takže otázka je pořád stejná. Když nedefinuju $IFS, tak čtu špatně soubor. Když definuju $IFS, tak se mi v cyklu odmítá cokoli spustit (dokonce i mimo cyklus)! Co s tím? PS: Ten druhý způsob cyklu s read jsem už taky zkoušel. Chovalo se to stejně. Navíc jsem nevěděl jak se zbavit řádků s komentáři...
while read line; do ... done < $Config
#!/bin/bash
Config=1.cfg
OLDIFS="$IFS"
MYSEP=';'
IFS="$MYSEP"
grep -v "^#" $Config | while read label remoteuser command2 command3
do
command="mkdir /test"
echo $command
echo $command2
echo $command3
sshcmd="ssh $remoteuser"
#nejpozději tady
IFS="$OLDIFS"
cmd1="$($sshcmd $command; exit)"
cmd2="$($sshcmd $command2; exit)"
cmd2="$($sshcmd $command3; exit)"
IFS="$MYSEP"
done
Ach jo. To je opravdu tak těžké pochopit, že pro řešení problému je potřeba ukázat, jak vypadá konfigurační soubor, se kterým máte problémy, ne ten, se kterým je nemáte?
Takže otázka je pořád stejná. Když nedefinuju $IFS, tak čtu špatně soubor. Když definuju $IFS, tak se mi v cyklu odmítá cokoli spustit (dokonce i mimo cyklus)! Co s tím?
Místo tučného písma a vykřičníku raději poskytněte informace potřebné k řešení. Takhle můžu jen hádat, jeden problém by mohl být v tom, že když nastavíte proměnnou IFS takhle, tak (1) ovlivní úplně všechno, co dělá váš shell a co závisí na její hodnotě, tj. i v té příkazové substituci a (2) jen shodou okolností se vůbec aplikuje na ten příkaz read. Proměnná IFS je nebezpečná hračka a měla by se nastavovat jen tam, kde to opravdu potřebujete, tj.
egrep -v '^#' $config | while IFS=';' read label target cmd2 cmd3; do
Další problém, na který narazíte vzápětí, je, že všechno, co je v těle cyklu, tedy i ssh, zpracovává stejný standardní vstup jako read, takže se ve výsledku zpracuje jen první řádek. Dá se to obejít různě, např. tak, že všemu, co by mohlo něco číst ze vstupu (např. tomu ssh) přesměrujete vstup z /dev/null. Nebo si lze pomoci trikem
exec 3< <(egrep -v '^#' $config) while IFS=';' read label target cmd2 cmd3 <&3; do
Na vašem místě bych si ovšem nekomplikoval život, konfigurační soubor by vypadal takto
job1 mike@host1 id ; df -h / ; w -f job2 root@host1 id ; w -f job3 root@host2 id ; w -f ; df -h
a skript takto
#!/bin/bash
egrep -v '^#' cmds | while read label target cmd; do
out=`ssh $target "$cmd" </dev/null`
echo -e "job $label:\n$out"
done
Tiskni
Sdílej: