IBM kupuje společnost HashiCorp za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.
Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.
Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.
Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.
Byla vydána nová verze 6.2 ž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.14.
Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.
Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.
Evropský parlament dnes přijal směrnici týkající se tzv. práva spotřebitele na opravu. Poslanci ji podpořili 584 hlasy (3 bylo proti a 14 se zdrželo hlasování). Směrnice ujasňuje povinnosti výrobců opravovat zboží a motivovat spotřebitele k tomu, aby si výrobky nechávali opravit a prodloužili tak jejich životnost.
Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.
ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.
function clean() { if test -f "Makefile" then rm -f "Makefile" fi if test -f "install.sh" rm -f "install.sh" fi #tu mi to hlásí chybu unexpected token fi if test -f "$DEST_DIR/toolkit-config" rm -f "$DEST_DIR/toolkit-config" fi }
clean() { if [ -f "Makefile" ]; then rm -f "Makefile" fi }Uvedeni slova "function" me nefunguje v cistem sh. Dal bych proto prednost neuvadeni jej. V praxi se lze ovsem setkat i s necim takovymhle:
clean() { MAKEFILE="Makefile" [ -f Makefile ] && rm -f Makefile }To uz ovsem silne pripomina zkratky jak je zavadi C a perl a ja osobne se jim snazim kvuli prehlednosti vyhybat.
clean() { MAKEFILE="Makefile" [ -f "$MAKEFILE" ] && rm -f $MAKEFILE }
test
, tak jeho alias [
jsou built-in příkazy bash
e. A na rozdíl od vámi propagovaného [[...]]
, což je čirá bashovina, fungují i v jiných bourne-like shellech, pouze trochu pomaleji.
$ which [ /usr/bin/[Na interny prikaz toho vykonava sakra vela:
$ strace [ execve("/usr/bin/[", ["["], [/* 78 vars */]) = 0 uname({sys="Linux", node="semo", ...}) = 0 brk(0) = 0x804f000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=89324, ...}) = 0 mmap2(NULL, 89324, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f0b000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0200\213"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1201624, ...}) = 0 mmap2(0x4989e000, 1141980, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4989e000 madvise(0x4989e000, 1141980, MADV_SEQUENTIAL|0x1) = 0 mmap2(0x499af000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x110) = 0x499af000 mmap2(0x499b3000, 7388, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x499b3000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0a000 mprotect(0x499af000, 4096, PROT_READ) = 0 mprotect(0x4989a000, 4096, PROT_READ) = 0 set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f0aa90, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 munmap(0xb7f0b000, 89324) = 0 open("/dev/urandom", O_RDONLY) = 3 read(3, "b\\\300\"", 4) = 4 close(3) = 0 open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory) brk(0) = 0x804f000 brk(0x8070000) = 0x8070000 open("/usr/share/locale/locale.alias", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=2586, ...}) = 0 mmap2(NULL, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7eea000 read(3, "# Locale name alias data base.\n#"..., 131072) = 2586 read(3, "", 131072) = 0 close(3) = 0 munmap(0xb7eea000, 131072) = 0 open("/usr/lib/locale/en_US/LC_IDENTIFICATION", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=378, ...}) = 0 mmap2(NULL, 378, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f20000 close(3) = 0 open("/usr/lib/locale/en_US/LC_MEASUREMENT", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=28, ...}) = 0 mmap2(NULL, 28, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f1f000 close(3) = 0 open("/usr/lib/locale/en_US/LC_TELEPHONE", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=64, ...}) = 0 mmap2(NULL, 64, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f1e000 close(3) = 0 open("/usr/lib/locale/en_US/LC_ADDRESS", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=160, ...}) = 0 mmap2(NULL, 160, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f1d000 close(3) = 0 open("/usr/lib/locale/en_US/LC_NAME", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=82, ...}) = 0 mmap2(NULL, 82, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f1c000 close(3) = 0 open("/usr/lib/locale/sk_SK/LC_PAPER", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=39, ...}) = 0 mmap2(NULL, 39, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f1b000 close(3) = 0 open("/usr/lib/locale/en_US/LC_MESSAGES", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFDIR|0755, st_size=80, ...}) = 0 close(3) = 0 open("/usr/lib/locale/en_US/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=57, ...}) = 0 mmap2(NULL, 57, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f1a000 close(3) = 0 open("/usr/lib/locale/en_US/LC_MONETARY", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=291, ...}) = 0 mmap2(NULL, 291, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f19000 close(3) = 0 open("/usr/lib/locale/en_US/LC_COLLATE", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=21499, ...}) = 0 mmap2(NULL, 21499, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f13000 close(3) = 0 open("/usr/lib/locale/en_US/LC_TIME", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=2456, ...}) = 0 mmap2(NULL, 2456, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f12000 close(3) = 0 open("/usr/lib/locale/en_US/LC_NUMERIC", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=59, ...}) = 0 mmap2(NULL, 59, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f11000 close(3) = 0 open("/usr/lib/locale/sk_SK/LC_CTYPE", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=178464, ...}) = 0 mmap2(NULL, 178464, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7ede000 close(3) = 0 open("/usr/share/locale/en_US/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) write(2, "[: ", 3[: ) = 3 write(2, "missing `]\'\n", 12missing `]' ) = 12 close(1) = 0 exit_group(2) = ? Process 387 detached
To ovšem vůbec neznamená, že to není interní příkaz. Za prvé:
mike@lion:~> echo -n > ~/bin/history mike@lion:~> chmod +x ~/bin/history mike@lion:~> which history /home/mike/bin/history mike@lion:~> history | wc -l 1000
Znamená to snad podle vás, že history
není builtin příkaz shellu? Za druhé: pokud spustíte 'strace [
', je jasné, že se spustí externí verze, pokud ale spustíte jen '[
', spustí se builtin. A konečně za třetí: vytvořte si skript jménem showpid
s tímto obsahem:
#!/bin/bash echo $$a zkuste spustit:
./showpid ; ./showpid ; test -e blabla ; ./showpid ; /usr/bin/test -e blabla ; ./showpid
Pokud se vám do toho něco nepřiplete, vypíše vám to tři po sobě jdoucí čísla a čtvrté, které je o dva větší než třetí. Přesně stejně to dopadne i v případě, že místo test
použijete levou hranatou závorku. Dokážete to vysvětlit za předpokladu, že test
není interní příkaz bashe?
test
interní příkaz bashe, proč je uváděn jako builtin jak v manuálové stránce k bashi samotnému, tak v manuálové stránce jeho builtin příkazů?
chmod 000 /usr/bin/test test a = a && echo "a=a" test a = b && echo "a=b" chmod 755 /usr/bin/test
$ time for ((i=0; i<10000; i++)); do [ a == a ]; done real 0m0.183s user 0m0.168s sys 0m0.016s
$ time for ((i=0; i<10000; i++)); do test a == a; done real 0m0.178s user 0m0.172s sys 0m0.004s
$ time for ((i=0; i<10000; i++)); do [[ a == a ]]; done real 0m0.123s user 0m0.116s sys 0m0.004sPre porovnanie skutocne externy prikaz (je teda jasne, ze nic z vyssieho nebude externe):
$ time for ((i=0; i<10000; i++)); do /usr/bin/test a = a ; done real 0m30.510s user 0m7.212s sys 0m23.281sZaujimave uz len ostava, preco ku rovnakym prikazom (aj ked pod inym menom) sa sprava rozne. Dokonca aj [ sa lisi od test.
Tiskni Sdílej: