Triky pro Bash
Lepší prompt
Výchozí nastavení vám v terminálu vypíše něco jako adam@peklostroj:/home/adam$
.
Vcelku cool, ale otravně dlouhé a zbytečné.
Jako náhradu navrhuju, abyste si na konec souboru ~/.bashrc
doplnili následující kód:
fancy_prompt() { local odd=$(tput setaf 3) if [ -n "${SSH_CONNECTION}" ]; then local even=$(tput setaf 4) else local even=$(tput setaf 2) fi local reset=$(tput sgr0) PS1="\[$(tput bold)$odd\]\$?\[$even\]\\A\[$odd\]\\w\[$reset\] " } if [ "$color_prompt" = yes ]; then fancy_prompt; fi
Co jsem od toho chtěl:
- barvy, aby šlo při listování zpátky ve výpisech snadno najít, kde jsem spouštěl nějaký příkaz (vynálezy s
tput
a hranatými závorkami); - návratová hodnota naposledy spuštěného programu. Většinou uvidíte jenom nulu, ale je dobré mít přehled, když se něco rozbije a program vrátí kladné číslo. Někteří borci si umějí zařídit přebarvovací hodnotu, co píše nenulová čísla červeně, ale já ne (a na svědomí to každopádně má
$?
na začátku, nutno escapovat); - hodiny, abych ve výpisech měl přehled, jak dlouho trval který výpočet a kolik času jsem strávil u stroje kterou kravinou (
\A
, nutno escapovat); - aktuální adresář je vlastně jediné, co z původního promptu dává smysl (
\w
, nutno escapovat); - jasné odlišení ssh, abych omylem nenaváděl vzdálené počítače k nesmyslům (podmínka na
${SSH_CONNECTION}
).
Výsledek je tedy něco jako 023:45~/dokumenty
.
Jestli chcete tu proměnnou PS1
poladit podle svých představ, buďte opatrní na hranaté závorky kolem všech formátovacích značek; jinak se vám budou špatně vypisovat a zalamovat víceřádkové příkazy.
Iniciativní Python
Docela často omylem vkopíruju pythonský kód do terminálového okna s obyčejným Bashem.
Jediný způsob, jak to vyřešit pořádně, samozřejmě je dávat si pozor, ale malý trik aspoň pomůže.
Často totiž jsou na začátku nějaké příkazy import
, které k mému zděšení spouštějí skutečné programy v systému.
Pohodlí tedy prospěje, když se místo těch zbytečných programů spustí rovnou Python a začne provádět příkazy podle zadání.
Vložte si do souboru ~/.bashrc
následující dvě funkce:
import() { python3 -ic "import $*"; } from() { python3 -ic "from $*"; }
Různé programy
Nahrávání videa z monitoru
Pro natáčení návodů se hodí umět dělat záznam z monitoru.
VLC to umí, ale nedovede tam správně ukázat kurzor myši.
Dobře se mi osvědčil program recordmydesktop
, který sice má vachrlaté konzolové ovládání, ale následujícím skriptem si z něj můžete udělat nástroj na jedno kliknutí:
#!/bin/bash recordmydesktop --no-sound --on-the-fly-encoding --windowid=$(xwininfo | grep xwininfo | tail -n 1 | cut -f 4 -d ' ')
Jak doplnit zvuk? Doporučuju nahrát dodatečně v Audacity a rovnou si tam efektem nechat potlačit šum.
Jak to sestříhat? Doporučuju Blender, samozřejmě. Starší verze mívaly potíže video takhle pořízené správně načíst a seekovat v něm. Může se tedy vyplatit to ještě předem překonvertovat ffmpegem. Konkrétně používám příkaz v tomhle tvaru:
ffmpeg -i porizene_video.ogv -q:v 1 -r 25 nazev_pro_vystupni_video.mpg
Výstup z Blenderu taky nebývá moc dobře komprimovaný, tak ho kdyžtak ještě protáhněte ffmpegem znova. Předpokládám, že si necháte zvuk uložit od Blenderu do odděleného souboru, třeba jako flac. Následující program se v rámci druhého průchodu zeptá, jestli má soubor přepsat – což by šlo vyřešit, ale snad stačí vědět, že máte zmáčknout enter.
ffmpeg -i sestrihane_video.mpg -i sestrihany_zvuk.flac -map 0:0 -map 1:0 -f mp4 -c:v libx264 -preset slow -tune animation -ac 1 -strict -2 -b:v 300k -pass 1 vysledek.avi -threads 2; ffmpeg -i sestrihane_video.mpg -i sestrihany_zvuk.flac -map 0:0 -map 1:0 -f mp4 -c:v libx264 -preset slow -tune animation -ac 1 -strict -2 -b:v 300k -pass 2 vysledek.avi -threads 2