Největší kryptoměnová burza světa Binance se stala terčem útoku, při kterém podvodníci odcizili během několika minut kryptoměny v hodnotě přibližně 6,3 miliardy dolarů. Jedná se o největší kryptoměnovou krádež v historii, přibližně čtyřikrát větší než loňský útok na burzu Bybit. Binance se podařilo ve spolupráci s partnery zmrazit aspoň aktiva v hodnotě zhruba 3 miliard dolarů a slíbila, že veškeré ztráty pokryje z vlastních prostředků.
Zranitelnost CVE-2026-98432 s CVSS 9.8 odhalila AI od společnosti Anthropic. Jedná se o kritickou chybu v implementaci MPTCP (multipath TCP). Debian vydal patche 16.10. a 22.10., ale např. Ubuntu je zatím bez opravy. Více informací na The Hacker News.
Na Slovensku vznikla úplne nová rally hra, ktorá je zadarmo a funguje vo Windowse, Linuxe či na Macu. Greenie Rally má viac ako 50 tratí a vozidiel, šampionáty či turnaje. Má retro feeling a imituje automobilové hry z prelomu tisícročí. Vyskúšate prejsť všetky mapy na Škode 130RS?
Do základního systému NetBSD -current byl přidán nový editor atto jako alternativa k editorům vi a xedit.
Společnost System76 představila kompaktní 11litrový Thelio Prime Desktop. S procesorem AMD Ryzen 9000. S Pop!_OS 24.04 LTS s desktopovým prostředím COSMIC nebo Ubuntu 24.04 LTS.
Čínská státní televize pozastavila vysílání španělské La Ligy a čínské internetové platformy omezily obsah s Kylianem Mbappém poté, co slavný fotbalista ve francouzském pořadu The Bridge mluvil o svém oblíbeném memu, v němž je jeho tvář vložena do portrétu zobrazujícího diktátora Mao Ce-tunga. 'Můj oblíbený mem je ten, na kterém dali můj obličej na čínského diktátora. To mě opravdu rozesmívá. S přáteli ho používám pořád' řekl,
… více »Při příležitosti oslav Dne vzniku samostatného československého státu (28. října) byly uděleny medaile Za zásluhy tvůrci aplikace Záchranka Filipu Maleňákovi, vědci v oblasti umělé inteligence Tomáši Mikolovovi a Olze Štěpánkové, vědkyni zabývající se kybernetikou, robotikou a strojovým učením, průkopnici v oblastech výuky a využití umělé inteligence v medicínském inženýrství.
Apple představil nový iPad mini, iMac s čipem M6, 14palcový MacBook Pro s čipem M6 a MacBook Pro s PROLED XDR displejem – první Mac s dotykovým ovládáním.
Nedávno představený projekt mapSTL.com řeší budoucnost. 𝕏: "Netušil jsem, kolik patentů na generování map existuje. Existují patenty na generování fantasy map 🫣. Cokoliv je na 3D tiskárnu a tvoří to produkt, bude to mít patenty. Tak bacha na to!" … více »
Multiplatformní emulátor terminálu Ghostty byl vydán ve verzi 1.4 (𝕏). Přehled novinek a vylepšení v poznámkách k vydání.
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: