Pokud jste někdy v terminálu spustili příkaz, který chvíli trval, a pak jste začali dělat něco jiného, víte, jak snadno se ztratí pojem o čase. Rozrušte mě Už žádné vracení se do konzole každých pár minut, abyste zkontrolovali, zda je hotovo: nástroj zobrazí oznámení na ploše po dokončení dlouho běžícího příkazu.
Tento malý skript funguje na Debian, Ubuntu a jeho deriváty, stejně jako Arch LinuxVe výchozím nastavení považuje jakýkoli příkaz, jehož spuštění trvá déle než 10 sekund, za „dlouho běžící“ a pokud to nezměníte, upozorní vás pouze v případě, že aktivní okno není terminál, ve kterém proces běží, a to právě proto, aby se předešlo zbytečným rušivým vlivům, když se na toto okno již díváte.
Co je Undistract-me a jak to funguje?
Undistract-me je v podstatě sada shellových funkcí, které se připojují k cyklu provádění Bashu (a také mohou integrovat do Zshdetekovat, kdy příkaz začíná a končí. Když doba provádění překročí konfigurovatelnou prahovou hodnotu, spustí se upozornění na ploše a pokud si přejete, zvuk varování.
Skript je záměrně definován výchozí časový limit 10 sekund od kterého je příkaz považován za „dlouhý“. Tuto hodnotu lze upravit a lze také vytvořit seznam vyloučených příkazů s názvy, které by neměly generovat varování (například ls o cd Pokud jste si je upravili, někdy to chvíli trvá.
Dalším důležitým aspektem jeho fungování je kontrola aktivního okna: Oznámení se zobrazí pouze v případě, že nemáte terminál v popředí.Pokud chcete být i tak upozorněni, existuje proměnná prostředí, která toto chování zvrátí.
Projekt je open source a jeho kód je vydán pod licencí. ExpatHistoricky byl vývoj iniciován pomocí JML a je hostován na platformách jako Launchpad a GitHub. V podstatě používá známý „hack“ předběžný výkon pro Bash (inspirovaný dílem Glyf Lefkowitza obdržela příspěvky od lidí jako Chris Jones (Terminátor), Mikey Neuling y Stephen Rothwell, což zlepšilo jejich výkon a kvalitu.

Instalace na Debian, Ubuntu a deriváty
Nejpřímější cesta v systémech Debian / Ubuntu Je to přes standardní repozitáře. Jednoduše nainstalujte balíček a budete připraveni ho propojit se svým shellem.
sudo apt update
sudo apt install undistract-me
Ve velmi starých verzích Ubuntu existoval specifický PPA, pro případ, že pracujete se staršími prostředími, kde nakloněný Tento aktualizovaný balíček není k dispozici:
sudo add-apt-repository ppa:undistract-me-packagers/daily
sudo apt update
sudo apt install undistract-me
Po instalaci je třeba skript „připojit“ k shellu. V Bashu máte několik možností. Nejjednodušší přidá řádek automatické načítání do spouštěcího souboru:
echo 'source /etc/profile.d/undistract-me.sh' >> ~/.bashrc
Pokud dáváte přednost explicitní instalaci hlavní komponenty a instalačnímu programu hook, můžete tyto dva řádky napsat také do svého ~ / .bashrc Takto:
echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.bashrc
A nezapomeňte aktualizovat relaci shellu, aby se změny projevily pomocí zdroj po úpravě spouštěcích souborů.
source ~/.bashrc
Instalace na Arch Linux a deriváty (AUR)
V ekosystému Arch je Undistract-me k dispozici v AUR (obvykle ve variantě undistract-me-gitMůžete jej zkompilovat pomocí svého oblíbeného AUR helperu nebo ručně pomocí makepkgPro informaci, toto jsou běžné příkazy pro pomocníky které mnoho uživatelů zná:
pacaur -S undistract-me-git
packer -S undistract-me-git
yaourt -S undistract-me-git
Mějte na paměti, že některé z těchto pomocných nástrojů jsou zastaralé, ale slouží k ilustraci, že instalace se provádí z komunitního repozitáře. V každém případě, po instalaci, aktivace Pro váš shell se to dělá stejně jako v Debianu/Ubuntu: přidáním odpovídajících řádků do spouštěcího souboru.
Aktivace a použití s Bash a Zsh
Pro Bash existuje kromě výše uvedených variant také kompaktní blok, který můžete vložit na konec ~ / .bashrc aby se skript načetl v případě potřeby:
if ! [ -z "$BASH_VERSION" -o -z "$PS1" -o -n "$last_command_started_cache" ]; then
. /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install
fi
V Zsh se integrace dosahuje podobným způsobem, a to nasměrováním stejných řádků do souboru ~ / .zshrcVše najednou můžete vypsat tímto příkazem:
echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.zshrc
Po úpravě kteréhokoli z těchto souborů, znovu načíst konfiguraci z vašeho aktuálního shellu, aby se změny projevily bez odhlášení.
source ~/.bashrc
# o bien para Zsh
env zsh -l
# alternativamente
a source ~/.zshrc
Důležité: V mnoha terminálových emulátorech budete muset tuto možnost povolit „Spusťte příkaz jako přihlašovací shell“, v Terminál GNOME Nachází se v Nastavení profilu > Název a příkaz; v Terminál XFCE Najdete to v Nastavení > Obecné; a v Guake Nachází se v Nastavení > Obecné. Bez něj se hook nemusí správně načíst.

Nastavení: čas, výjimky, aktivní okno a zvuk
Funkce Undistract-me je primárně ovládána ze souboru /usr/share/undistract-me/long-running.bash a prostřednictvím proměnných prostředí. Tento soubor můžete otevřít ve svém oblíbeném editoru a zkontrolovat dostupné parametry.
Chcete-li změnit minimální dobu, po které je příkaz považován za „dlouhý“, vyhledejte proměnnou DLOUHÝ_ČASOVÝ_LIMIT_PROBÍHÁNÍ_PŘÍKAZUVýchozí hodnota je 10 (sekund), ale můžete ji nastavit dle libosti.
sudo nano /usr/share/undistract-me/long-running.bash
# Busca y ajusta:
# LONG_RUNNING_COMMAND_TIMEOUT=10
Pokud chcete určité příkazy nikdy nespouštět oznámení, přidá jejich názvy oddělené mezerami k proměnné DLOUHO_BĚŽÍCÍ_SEZNAM_IGNOROVANÝCH_PROGRAMŮJe to užitečné pro filtrování nástrojů, které používáte neustále a nechcete, aby vás rušily.
Na druhou stranu, pokud chcete dostávat oznámení, i když je terminál aktivním oknem, definujte IGNORE_WINDOW_CHECK=1Tím se deaktivuje kontrola a vždy Varování se zobrazí na konci dlouhého příkazu.
Chcete-li přidat zvukové upozornění, upravte proměnnou UDM_PLAY_SOUND na nenulové celé číslo. V systémech Debian/Ubuntu vyžaduje tato funkce instalaci pulseaudio-utils y sound-theme-freedesktop, protože se spoléhá na zvukové téma plochy.
sudo apt install pulseaudio-utils sound-theme-freedesktop
Po jakýchkoli změnách konfiguračního souboru nebo proměnných prostředí nezapomeňte dobijte si skořápku:
source ~/.bashrc
# o
source ~/.zshrc
Rychlé testy pro ověření funkčnosti
Nejjednodušší způsob, jak to ověřit, je spustit příkaz, který trvá déle než 10 sekund (nebo vámi nastavenou prahovou hodnotu). Můžete například provést ping k hostiteli ve vaší síti nebo ven s dostatečným počtem paketů k překročení časového limitu.
ping -c 25 1.1.1.1
V prostředí Archu je také velmi vizuální použití příkazu jako sudo pacman -Sycož obvykle chvíli trvá v závislosti na stavu zrcátek:
sudo pacman -Sy
Pamatujte na dvě klíčové věci: oznámení se zobrazí, když příkaz trvá déle než prahová hodnota, a ve výchozím nastavení pouze tehdy, pokud aktivní okno není terminál kde běží. Pokud proces skončí před uplynutím časového limitu, zprávu neuvidíte; pokud ji stále chcete dostávat, upravte hodnotu DLOUHÝ_ČASOVÝ_LIMIT_PROBÍHÁNÍ_PŘÍKAZU nebo zakázat kontrolu oken pomocí IGNORE_WINDOW_CHECK.
Rychlé alternativy bez nutnosti instalace čehokoli dalšího
I když je Undistract-me velmi praktické, existují minimalistická řešení, která můžete použít pouze tehdy, když chcete. S upozornit-poslat (Toto je obvykle ve výchozím nastavení zahrnuto v mnoha počítačích.) Na konec příkazu můžete přidat varování:
cat archivo && notify-send '¡Terminado!'
Pokud dáváte přednost viditelnějšímu dialogovému oknu, zeity Toto je další typická možnost v prostředí GTK. Způsob použití je stejně jednoduchý a po dokončení se zobrazí informační okno:
cat archivo && zenity --info --text='Proceso finalizado.'
Rychlý trik: místo && (který provede druhou část, pouze pokud první uspěje), můžete řetězit s ; aby oznámení prošlo bez ohledu na cokoli. Používejte jej opatrně v závislosti na situaci.
Existuje více alternativ a doplňků: od nástrojů jako NotiFyre i terminály s integrovanými oznámeními (například Tilix (Může vás upozornit, když je panel neaktivní). Pokud chcete nějaký extra zvuk a držíte se základů, můžete si sami vytvořit řetězec hlasových pokynů:
foo; spd-say 'tarea completada'
A pro ty, kteří stále používají hlasitý odposlech systému, jsou tu tací, kteří ho aktivují. pcspkr s pípnutím po dlouhém úkolu. Je to neohrabané, ale efektivní ve velmi omezeném prostředí.
Tipy pro použití a řešení problémů
Pokud nedostáváte oznámení, nejprve zkontrolujte, zda jste povolili možnost „přihlašovací shell“ ve vašem terminálovém emulátoru. Bez tohoto nastavení se Undistract-me nemusí načíst a hook se nemusí nainstalovat.
Také zkontrolujte, zda váš shell čte správný soubor (~ / .bashrc o ~ / .zshrca co jsi udělal/a zdroj Po úpravě přidejte ladicí řádek (například minout) pro potvrzení, že se soubor spustí při spuštění terminálové relace.
Pokud zapnete zvuk a nic neslyšíte, zkontrolujte přítomnost pulseaudio-utils a z balíčku sound-theme-freedesktopKromě hlasitosti a zvukového serveru ve vaší relaci. Na velmi minimalistických počítačích může být nutné spustit PulseAudio ručně nebo použít jiný backend.
Příliš mnoho oznámení pro triviální příkazy? Upravte DLOUHÝ_ČASOVÝ_LIMIT_PROBÍHÁNÍ_PŘÍKAZU na vyšší hodnotu a naplňte DLOUHO_BĚŽÍCÍ_SEZNAM_IGNOROVANÝCH_PROGRAMŮ s aliasy a nástroji, které nechcete monitorovat (například git status o docker ps pokud je hodně opakujete).
Detaily projektu a komunity
Kód Undistract-me je distribuován pod Expat licence a existuje jak na Launchpadu, tak na GitHubu. Nemá vyhrazený IRC kanál, ačkoli tradičně bylo možné ho na GitHubu najít. JML v ekosystému freenode (kdysi dávno, v #ubuntu-vývoj). V případě dotazů nebo chyb je příslušným kanálem otázky z repozitáře nebo projektu na Launchpadu.
Zajímavá zmínka pro ty, kteří si užívají vnitřní fungování ozubených kol: podpora předběžný výkon Typ Zsh v Bashi není nativní, takže skript používá zaseknout Inteligentní systém, který spouští funkce před a po každém příkazu. Díky příspěvkům, jako jsou ty od Chris Jones (z terminálu) Terminator) a optimalizace Mikey Neuling y Stephen RothwellVýkon se oproti prvním verzím výrazně zlepšil.
V každodenním používání se tento nástroj obzvláště dobře hodí při kompilaci, konverzi multimediálnísynchronizujete velké množství dat nebo provádíte operace balíček Chvíli to trvá. Vzorec je vždy stejný: spustit příkaz, přepnout okna a nechat plochu upozornit na dokončení.
Undistract-me splňuje přesně to, co slibuje: méně času stráveného koukáním do konzole a více se soustředit na to, co děláte. Snadno se instaluje, dolaďuje se pomocí několika proměnných a dobře se integruje s Bash a Zsh, což z něj dělá nutnost pro ty z nás, kteří tráví polovinu života v terminálu.