Evropská komise potrestala Google ze skupiny Alphabet pokutou 2,95 miliardy eur (71,9 miliardy Kč) za porušení antimonopolní legislativy. Podle EK, která mimo jiné plní funkci antimonopolního orgánu EU, se Google dopustil protisoutěžních praktik ve svém reklamním byznysu. Google v reakci uvedl, že rozhodnutí považuje za chybné a hodlá se proti němu odvolat. EK ve věci rozhodovala na základě stížnosti Evropské rady vydavatelů. Podle
… více »Podpora 32bitového Firefoxu pro Linux skončí v roce 2026. Poslední podporované 32bitové verze budou Firefox 144 a Firefox 140 s rozšířenou podporou, jehož podpora skončí v září 2026.
Společnost Raspberry Pi nově nabízí Raspberry Pi SSD s kapacitou 1 TB za 70 dolarů.
Microsoft BASIC pro mikroprocesor 6502 byl uvolněn jako open source. Zdrojový kód je k dispozici na GitHubu.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) se připojil k dokumentu „A Shared Vision of Software Bill of Materials (SBOM) for Cybersecurity“, který vydala americká Agentura pro kybernetickou a infrastrukturní bezpečnost (CISA) s Národní bezpečnostní agenturou (NSA), spolu s dalšími mezinárodními partnery. Dokument vznikl v rámci globálního expertního fóra pro SBOM, které má za cíl motivovat k širšímu využívání … více »
Švýcarská AI centra EPFL, ETH Zurich a CSCS představila otevřený vícejazyčný velký jazykový model (LLM) s názvem Apertus. Vyzkoušet lze na stránce Public AI Inference Utility.
Byl vydán Linux Mint 22.2 s kódovým jménem Zara. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze novou XApp aplikaci Fingwit pro autentizaci pomocí otisků prstů nebo vlastní fork knihovny libAdwaita s názvem libAdapta podporující grafická témata. Linux Mint 22.2 bude podporován do roku 2029.
Čínská společnost Tencent uvolnila svůj AI model HunyuanWorld-Voyager pro generování videí 3D světů z jednoho obrázku a určené trajektorie kamery. Licence ale nedovoluje jeho používání na území Evropské unie, Spojeného království a Jižní Koreje.
Blender Studio se spojilo s kapelou OK Go a výsledkem je videoklip k písni Impulse Purchase. Stejně jako samotný 3D software Blender je i ve videoklipu použitý animovaný chlápek open source. Kdokoli si jej může stáhnout a upravovat.
Zig Software Foundation stojící za programovacím jazykem Zig publikovala finanční zprávu za rok 2024. Současně s prosbou o finanční příspěvek.
V průběhu používání *uxu jsem zjistil, že používám stále stejnou sadu užitečných postupů při tvoření BASH skriptů.
Vytvořil jsem si šablonu a protože jsou v ní věci které považuji za opravdu užitečné a nenašel jsem je nikde dané pěkně pohromadě, tak ji dávám v plen. Snad se bude někomu hodit.
#!/bin/bash #set -x # Debug output ? DBG=n DBG=y ### Uitlity Variables ################# PRGNAME=`basename ${0}` ## needed for singleton scripts (see function make_pid_file() ) #PIDFILE="/var/run/${PRGNAME}.pid" # system scope (need root access) #PIDFILE="/tmp/${PRGNAME}.pid" # system scope (user access) PIDFILE="/tmp/${PRGNAME}.${USER}.pid" # user scope # Try get CFG from /etc/$CFGNAME, ~/.$CFGNAME and # mandatory cfg from /etc/$CFGNAME.mandatory # if $CFGNAME is empty do not use cfg files CFGNAME="${PRGNAME}" # if empty do not use cfg files #CFGNAME="" ### User Variables ##################### ### Utility functions ################## function dbg() { [ "s${DBG}" = "sy" ] && echo -e "DBG: ${@}" 1>&2 } function err() { dbg "function err()" echo -e "${PRGNAME}: ${@}" 1>&2 } function die() { dbg "function die()" se=${1} shift err ${@} exit "${se}" } function load_config() { dbg "function load_config()" [ -z ${CFGNAME} ] && dbg ' $CFGNAME not set, no cfg needed' && return # Try get CFG from /etc/$CFGNAME, ~/.$CFGNAME and # mandatory cfg from /etc/$CFGNAME.mandatory CFGloaded=n for cfg in "/etc/${CFGNAME}" "~/.${CFGNAME}" "/etc/${CFGNAME}.mandatory" do if [ -r "${cfg}" ] then . ${cfg} || die 1 "Loading configuration from ${cfg} failed." dbg " lodaing cfg. from ${cfg}" CFGloaded=y fi done [ "s${CFGloaded}" = "sn" ] && die 2 "No configuration file found in: " \ "/etc/${CFGNAME}" "~/.${CFGNAME}" "/etc/${CFGNAME}.mandatory" } function cleanup() { dbg "function cleanup()" # make a clean up think if [ -n "${PIDFILE}" -a -r "${PIDFILE}" ] then rm -f "${PIDFILE}" \ || err "${PRGNAME}# Can not delete PID file: ${PIDFILE}" fi } function make_pid_file() { dbg "function make_pid_file()" [ -z ${PIDFILE} ] && dbg ' $PIDFILE is not set, not using it' && return # Single ton scope is set by PIDFILE value # PIDFILE="/var/run/${PRGNAME}.pid" is in system scope (need root access) # PIDFILE="/tmp/${PRGNAME}.pid" is in system scope (user access) # PIDFILE="/tmp/${PRGNAME}.${USER}.pid" is in user scope if [ -f ${PIDFILE} ] then ## Another instance is running OTHER_PID=`cat ${PIDFILE}` err "EXITING\n Pid file found: ${PIDFILE}" err " Probably another instance of ${PRGNAME} is running. (PID=${OTHER_PID})" die 127 "Check-it please ..." else echo "${$}" > "${PIDFILE}" 2>/dev/null [ -f "${PIDFILE}" ] || \ die 126 "${PRGNAME}# Can not create PID file: ${PIDFILE}" chmod 600 "${PIDFILE}" fi } ### Cfg. Loading ################### load_config ### Pre Run Checks ################# dbg "### Additional Checks ###" # if it has to be singleton (see make_pid_file() for info. about scope) make_pid_file ####################################### dbg "setting trap" # in case of any exit run cleanup procedure # 0 means normal exit so you can not do cleanup "by hand" trap cleanup 0 2 3 4 9 11 15 # I know, I know at least 9 can not by catched ### Main Part########################## dbg "### Main Part ###" #######################################
Tiskni
Sdílej:
function dbg_init () { case "$1" in '-') exec 4>&1 ;; '') exec 4>/dev/null ;; *) exec 4>>"$1" ;; esac } # dbg_init # dbg_init '-' # dbg_init "/var/log/${PROGNAME}.log" function dbg() { echo -e "DBG: ${@}" >&4 }
Navíc perl opravdu není všude ...To BASH taky ne
Ale i do Windows se dá doinstalovat...To BASH taky ... (já ve Win používám ZSH, ale BASH jsem taky někde viděl) Vždyť Win mají POSIX layer neeeeee
software, jehož tvůrci si bůhvíproč mysleli, že musí umět všechno
Spíš než takový monstrózní software považuji za ideální jednotlivé komponenty, které jsou integrované nějakým lepším způsobem, než jsou skripty v BASHi. Mám radši systém tažený událostmi, než takový, který musí být neustále popoháněn pomocí skriptů* aby vůbec fungoval (obvykle periodicky spouštěných cronem).
Ale je fakt, že svět není ideální a bez skriptů se člověk neobejde, alespoň bez těch init.d (pokud nepoužívá nejmenovaný úžasný OS se svcadm).
BTW: to RFC se mi líbí a patička je super
*) které navíc psal admin nikoli programátor a tester kolem nich neprošel ani cestou na oběd
Spíš než takový monstrózní software považuji za ideální jednotlivé komponenty, které jsou integrované nějakým lepším způsobem, než jsou skripty v BASHi. Mám radši systém tažený událostmi, než takový, který musí být neustále popoháněn pomocí skriptů* aby vůbec fungoval (obvykle periodicky spouštěných cronem).Teď mluvíš o Emacsu...
Aneb ukaž mi software, který dělá úplně všechno.
Bez váhání dávám Emacs. ^_^
#!/bin/sh
help(){
echo Usage: $0
}
if [ $# -lt 1 ]
then
help
else
echo OK
fi
while getopts h opt
do
case $opt in
h) help;;
\?) help;;
esac
done
shift $(($OPTIND - 1))
echo Running
[ "s${DBG}" = "sy" ] && echo -e "DBG: ${@}" 1>&2
Jaký je rozdíl oproti
[ "${DBG}" = "y" ] && echo -e "DBG: ${@}" 1>&2
?
$DBG && echo -e "DBG: $@" >&2
$ DBG=true $ $DBG && echo "OK" OK $ $ DBG=false $ $DBG && echo "OK" $ $ DBG=jabaduba $ $DBG && echo "OK" bash: jabaduba: command not found # šlo by ošetřit pomocí set -e - bash by po takovéto chybě nepokračovat $ $ unset DBG $ $DBG && echo "OK" OK # je to opravdu chování které autor chtěl? $2) na shellech kde "true", "false" a "test" jsou uvnitř shellu je téměř jedno který z nich voláte a s "test" máte jistotu CO to udělá.
# set |grep DBG # [ "${DBG}" = "y" ] && echo Yes || echo No No # DBG=y # [ "${DBG}" = "y" ] && echo Yes || echo No Yes #
# [ "${DBG:-n}" = "y" ] && echo Yes || echo No
$ echo "${QQQ:-www}" www $Nedostanete se někdo ke starším verzím? Jak je to tam?
Fakt ... koukam jako trubka. :->Zlomená?
$ DBG="y" $ $ [ "s${DBG}" = "sy" ] && echo OK OK $ $ [ "${DBG}" = "y" ] && echo OK OK $ $ [ ${DBG} = "y" ] && echo OK OK $ $ [ $DBG = "y" ] && echo OK OK $ $ $ $ DBG="n" $ $ [ "s${DBG}" = "sy" ] && echo OK $ $ [ "${DBG}" = "y" ] && echo OK $ $ [ ${DBG} = "y" ] && echo OK $ $ [ $DBG = "y" ] && echo OK $ $ $ $ $ unset DBG $ $ [ "s${DBG}" = "sy" ] && echo OK $ $ [ "${DBG}" = "y" ] && echo OK $ $ [ ${DBG} = "y" ] && echo OK bash: [: =: unary operator expected $ $ [ $DBG = "y" ] && echo OK bash: [: =: unary operator expected $
žádný Když tak o tom přemýšlím tak je to trik který jsem se naučil na nějakém opravdu starém U*xu. Mám pocit, že to souviselo se shellem v POSIX režimu, ale už opravdu nevím.ten "trik" je o imho viac o používaní uvodzoviek ako o starom U*x-e
test
, které si neporadí s [ "$x" = "y" ]
, není-li proměnná x
nastavena. Pokud je ale na začátku skriptu '#!/bin/bash
', je zbytečné toto zaříkávání provádět.
Pokud je ale na začátku skriptu '#!/bin/bash
', je zbytečné toto zaříkávání provádět.
Jasně, prostě se člověk snaží psát přenositelně, i když má rád BASH. Schválně to otestuji v POSIX režimu a potom na /bin/shna HP/UX a solarisu ... dám vědět.