Byla vydána (𝕏) nová major verze 17 softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech GitLab (Wikipedie). Představení nových vlastností i s náhledy a videi v oficiálním oznámení.
Sovereign Tech Fund, tj. program financování otevřeného softwaru německým ministerstvem hospodářství a ochrany klimatu, podpoří vývoj FFmpeg částkou 157 580 eur. V listopadu loňského roku podpořil GNOME částkou 1 milion eur.
24. září 2024 budou zveřejněny zdrojové kódy přehrávače Winamp.
Google Chrome 125 byl prohlášen za stabilní. Nejnovější stabilní verze 125.0.6422.60 přináší řadu oprav a vylepšení (YouTube). Podrobný přehled v poznámkách k vydání. Opraveno bylo 9 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Textový editor Neovim byl vydán ve verzi 0.10 (𝕏). Přehled novinek v příspěvku na blogu a v poznámkách k vydání.
Byla vydána nová verze 6.3 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.15.
Dnes ve 12:00 byla spuštěna první aukce domén .CZ. Zatím největší zájem je o dro.cz, kachnicka.cz, octavie.cz, uvycepu.cz a vnady.cz [𝕏].
JackTrip byl vydán ve verzi 2.3.0. Jedná se o multiplatformní open source software umožňující hudebníkům z různých částí světa společné hraní. JackTrip lze instalovat také z Flathubu.
Patnáctý ročník ne-konference jOpenSpace se koná 4. – 6. října 2024 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytváří všichni účastníci, se skládá z desetiminutových
… více »Program pro generování 3D lidských postav MakeHuman (Wikipedie, GitHub) byl vydán ve verzi 1.3.0. Hlavní novinkou je výběr tvaru těla (body shapes).
TEXT="/etc/apache2/host|/tmp/apache2/host"
Řešení dotazu:
${TEXT%|*}
a ${TEXT#*|}
Případně obecněji pro libovolný počet částí: IFS='|' toks=($TEXT); echo "${toks[0]}, ${toks[1]}, ..."
(mezi nastavením IFS a přiřazením poli nemá být ani konec řádku, ani středník, aby se po přiřazení zachovalo původní IFS).
TEXT="/etc/apache2/host|/tmp/apache2/host|/var/apache2/host"
IFS="|" for READ in $(cat /tmp/data.txt) do TOKS=($READ) ${TOKS[0]} ${TOKS[1]} ${TOKS[2]} done
mezi nastavením IFS a přiřazením poli nemá být ani konec řádku, ani středník, aby se po přiřazení zachovalo původní IFS.
Rejp, tohle neplatí, nezachová se. Pokud v jednoduchém příkazu není nic jiného než přiřazení (a přesměrování), mění všechna proměnné aktuálního shellu (viz man bash, Simple Command Expansion). (Pokud je, nezmění se žádná z nich.)
I další doteď uvedené příklady změní IFS shellu, což si lze snadno ověřit skrze:set|grep IFS
, příp. povšimnout si na jaká slova se nadále expanduje proměnná TEXT: kupř. pomocí echo $TEXT "$TEXT"
(dělení slov dle $IFS
není totéž a tehdy, kdy se rozpoznávají jednotlivá slova-tokeny (ty v bashi vždy oddělují znaky: | & ; ( ) < > space tab
)).
LANG=POSIX df dfPrvní příkaz se vypíše v POSIXu, druhý zase s původní lokalizací.
a=b c=dcož skutečně není globální přiřazení c=d s lokálním nastavením a=b, ale globální přiřazení do c i a. Takže to IFS by se mělo raději nastavovat jinde...
TEXT="/etc/apache2/host|/tmp/apache2/host" echo "Old IFS: $IFS" IFS='|' toks=($TEXT); echo "${toks[0]}, ${toks[1]}, ..." echo "New IFS: $IFS"
Old IFS: /etc/apache2/host, /tmp/apache2/host, ... New IFS: |
moje() { local IFS=\|; toks=($TEXT);}
prirad() { local IFS=$1; eval $2=\(\$$3\);}
prirad \| toks TEXT
prirad() { [ $# -eq 3 ] || return 1; local IFS=$1; eval $2=\(\$$3\);}
prirad() { [[ $# -eq 3 ]] || return 1; IFS=$1 eval $2=\(\$$3\);}
ráno (někdy i může být) moudřejší večera :)
bash$ [ 1 < 2 ] && echo ok bash: 2: No such file or directory bash$ [ 1 \< 2 ] && echo ok ok bash$ [[ 1 < 2 ]] && echo ok ok bash$ a="1 2" bash$ [ $a = "1 2" ] && echo ok bash: [: too many arguments bash$ [ "$a" = "1 2" ] && echo ok ok bash$ [[ $a == "1 2" ]] && echo ok ok bash$ [[ "$a" =~ ^[[:digit:]]" "[[:digit:]] ]] && echo ok ok a=1;b=2 bash$ [[ $a > 0 && $b == 2 ]] && echo ok ok bash$ [ "$a" -gt 0 -a "$b" -eq 2 ] && echo ok okChtěl jsem přijít na to, proč tak důrazně radikálně trváš na tom, že by se to mělo řešit jinak, když tvé původní řešení bylo dobře a nové řešení nepřineslo žádnou změnu či výhodu.
test
(i se synonymem [
) je v bashi také builtin.
echo "$TEXT" | while IFS='|' read a b c; do echo "První část: $a" echo "Druhá: $b" echo "Zbytek: $c" done
Což má ale jednu podstatnou nevýhodu, totiž že rozsekané proměnné žijí jen v rámci subprocesu s while. V bashi to nicméně jde pěkně vyřešit pomocí while ... done <<<"$TEXT"
.
Jo, a while je pro jeden řádek samozřejmě zbytečné, takže případně prostě
IFS='|' read a b c <<<"$TEXT";
echo "$TEXT" | while IFS='|' read a b ctak to nefungovalo, ale
IFS='|' read a b c <<<"$TEXT";funguje bez problémů. Navíc jsi ušetřil jeden proces, takže to vidím jako skvělé řešení.
Tiskni Sdílej: