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.
Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.
Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.
Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.
Aby bylo jasno, o čem bude řeč: Prompt, to je takové to user@localhost $ nebo třeba bash-4.1#, které vidíte v konzoli. Prompt lze nastavit tak, aby zobrazoval (vám) užitečné informace a navíc ještě vypadal dobře, což se vyplatí, trávíte-li v shellu aspoň nějaký čas.
Jak se to dělá? Nastavením proměnné PS1 na požadovanou hodnotu. Chcete-li například, aby výzva obsahovala pouze znak ">", nastavte PS1 takto:
PS1="> "
Aby toto nastavení přetrvalo i po ukončení shellu a použilo se pro další vytvořené shelly, přidejte deklaraci proměnné do souboru ~/.bashrc
či ~/.bash_profile
, pokud chcete nastavit prompt pouze pro uživatele, pod kterým pracujete, anebo do souboru /etc/bashrc
(případně /etc/bash/bashrc
, třeba na Gentoo), pokud chcete nastavit prompt pro všechny.
Pokud chcete používat takto chudý prompt např. z důvodu nedostatku místa na malé obrazovce mobilu, tak budiž, ale my si dále ukážeme, jak do promptu dostat nějaké užitečné informace. Manuálová stránka Bashe v sekci PROMPTING obsahuje přehled hodnot, které když do PS1 přidáte, tak se automaticky nahradí za požadovanou informaci. Některé z nich si vyjmenujeme a popíšeme:
/home/dave
) je zkrácen na tildu (~
)./tmp/x/y
, zobrazí y
).Předpokládejme počítač s názvem amd64.watzke.cz a uživatelem dave. Ukážeme si několik ukázkových zápisů PS1:
PS1="\u@\h \w \$ " # bude vypadat takto: dave@amd64 /tmp $ PS1="[\u \H \A \W]\$ " # [dave amd64.watzke.cz 16:55 tmp]$ PS1="\u [\j]> " # dave [2]>
Toto je základní způsob, jak do promptu dostat informace. Teď bychom je mohli ještě obarvit, jelikož to může zlepšit přehlednost a my pak rychleji najdeme tu konkrétní informaci, kterou zrovna hledáme. Obarvení se provádí tak, jak jsem nedávno popisoval v článku Barevný a formátovaný text v terminálu. Akorát je zde jedna maličkost. Přestože to funguje i bez toho, je vhodné přidat před každou escapovací sekvenci \[
a za ní pak \]
. Dělá se to z toho důvodu, aby Bash věděl, že jde o „netisknutelné“ znaky (pouze mění formátování, nevloží žádný znak) a nezapočítával je do délky promptu, protože to způsobuje problémy se zalamováním, když zadáte nějaký dlouhý příkaz. Takže třeba červeného textu docílíte takto:
\[\033[31\]Červený text…\[\033[0m\]
Jestli vám zápisy formátování připadaly nepřehledné předtím, teď to celé dostalo nový rozměr. Proto je vhodné uložit si jednotlivé barvy do proměnných a ty pak použít při tvoření PS1.
KONEC="\[\033[0m\]"
TYRKYSOVA="\[\033[36;1m\]"
CERVENA="\[\033[31;1m\]"
PS1="${TYRKYSOVA}\u${KONEC}@${CERVENA}\h${KONEC} \$ " # dave@amd64 $
Opět připomínám, že formátování je třeba ukončovat (proměnná KONEC
).
Tak už umíme sestavit barevný prompt. Je na čase si trochu rozšířit obzory. Jelikož lze do PS1 nacpat opravdu cokoliv a Bash svými speciálními sekvencemi typu \h pochopitelně nepokrývá všech nekonečno možností, je zde proměnná PROMPT_COMMAND
. Do této proměnné můžete vložit příkaz, který daný prompt vygeneruje a nastaví. Vhodné je nastavit proměnnou třeba takto:
PROMPT_COMMAND="source $HOME/.prompt.sh"
Ale ještě předtím je třeba vytvořit soubor ~/.prompt.sh
, ve kterém se proměnná PS1 nastaví. Může to být bashový skript se vším, co k tomu patří. Například můj prompt vypadá takto:
#!/bin/bash S=$? END="\[\e[0m\]" RED="\[\e[31;1m\]" CYAN="\[\e[36;1m\]" GREEN="\[\e[32;1m\]" YELLOW="\[\e[33;1m\]" if [[ $S -eq 0 ]]; then DOLLAR="${YELLOW}\$" else DOLLAR="${RED}\$" fi PS1="${CYAN}\u${END}@${RED}\h${END} ${GREEN}\w${END} ${DOLLAR}${END} "
Vlastně jediným důvodem, proč jsem si vytvářel skript na nastavení PS1, je nastavení barvy znaku dolaru, který je na konci. Barva závisí na návratové hodnotě naposledy spuštěného příkazu. Když je hodnota rovna 0 (příkaz se vykoná s úspěchem), dolar je žlutý, jinak je červený.
Ovšem pozor na to, vy si můžete vymýšlet daleko víc než já. Můžete si do promptu vložit výpisy z programů a podobně. Nic vám nebrání vložit tam třeba teplotu procesoru:
# tohle je velice specifický zápis (pro konkrétní senzorový čip),
# ale je to tak rychlejší než parsovat výstup příkazu sensors
CPU=$(( $(</sys/devices/platform/it87.656/temp1_input) / 1000 ))
# nastaví CPU_COLOR podle teploty procesoru
if [[ $CPU -gt 60 ]]; then
CPU_COLOR="$RED"
elif [[ $CPU -gt 50 ]]; then
CPU_COLOR="$YELLOW"
else
CPU_COLOR="$GREEN"
fi
# prompt bude vypadat takto: dave@amd64 [57°C]
PS1="\u@\h [${CPU_COLOR}${CPU}°C${END}] "
V případě, že se rozhodnete používat PROMPT_COMMAND
, stačí tuto proměnnou nastavit v některém ze souborů, kam byste jinak uložili PS1
(viz začátek článku).
Za zmínku stojí ještě proměnná PS2
. Řetězec, který drží, se vypíše s každým odřádkováním při psaní víceřádkového příkazu. Výchozí hodnota je "> ".
for((i=0;i<10;i++)); do > echo "číslo $i" > done # pro milovníky pythonního interpreteru PS2="... " for((i=0;i<10;i++)); do ... echo "číslo $i" ... done
Pokud používáte xterm
, můžete si nastavovat i titulek okna přidáním následující sekvence do proměnné PS1:
\[\033]0;Titulek\007\]
Pro přehlednost to můžete udělat až po nastavení PS1 takto:
case "$TERM" in xterm*) TITLEBAR="\[\033]0;cwd: \w\007\]" *) TITLEBAR="" esac PS1="$TITLEBAR\ $PS1"
Jak jsem teď naznačil v kódu, je vhodné kontrolovat, zda jsme v xtermu, nebo ne, protože na VT tato sekvence přidá nesmysly do promptu.
Nástroje: Tisk bez diskuse
Tiskni Sdílej:
PS1="\h@\u \w \$ " # bude vypadat takto: dave@amd64 /tmp $
je prohozené \h a \u.
\[\033[01;31m\]${?/#0/}\[\033[01;36m\]Hlavny trik je
${?/#0/}
, ktory zabezpeci vypis/nevypis podla navratovej hodnoty aj bez spustenia procesu.
$ echo $$ `if [[ 0 -eq 0 ]] ; then echo $$; fi` 10184 10184
$ echo $$ `ll /proc/self` 7651 lrwxrwxrwx 1 root root 64 2010-03-17 20:15 /proc/self -> 4123/
echo $$ echo `echo $$` echo `ls; echo $$`To vyzera, ze ani nerozlisuje, ci treba pustat novy proces alebo si vystaci sam, ale skutocne to vykonava v kontexte jedneho procesu
$ echo -e "$$ \n`ls -l /proc/self; echo $$`" 5287 lrwxrwxrwx 1 root root 64 2010-03-18 08:57 /proc/self -> 10210 5287
$$ Expands to the process ID of the shell. In a () subshell, it expands to the process ID of the current shell, not the subshell.Ked som skusil nieco ako grep napisane v cistom bashi, tak sa pid meni:
$ echo $$ 6096 $ echo `while read l; do [[ "$l" == Pid:* ]] && echo "$l"; done </proc/self/status` Pid: 7667 $ echo `while read l; do [[ "$l" == Pid:* ]] && echo "$l"; done </proc/self/status` Pid: 7668Trocha to vidno na premennej BASH_SUBSHELL
$ echo $BASH_SUBSHELL 0 $ echo `$ echo $BASH_SUBSHELL` 1
echo $$ `echo \$\$` 18053 18053 echo $$; (eval echo '$$') 18053 18053 echo $$ ` (eval echo '\$\$') ` 18053 18053Pokud chcete definitivní odpověď, zkuste strace
it expands to the process ID of the current shell, not the subshell.aj pozdna expanzia vracia pid nadradeneho shellu. Nesfalsovanu hodnotu som ziskal z /proc/self/status. Ked som sa externym strace pripojil na bash a spustil
echo `echo \$\$`
, tak vo vypise syscallov je pipe
a hned za nim clone
. Takze proces sa vytvara.
Já kdysi používal něco takového, ale když se na to dívám zpětně, asi bych už takovou šílenost nikdy znovu nechtěl
jo tak tuhle zrudu jsem pouzival taky
Hehe, tak to je nás viac (resp. bolo)
Ja to mam takto a staci mi :
[ martin@~/workspace/ ]:16:25:^_^:
> qwert
bash: qwert: command not found
[ martin@~/workspace/ ]:16:39:-_-:
>
$ mc bash: mc: command not found