Hvis du nogensinde har kørt en kommando i terminalen, der tog et stykke tid, og derefter begyndte at gøre noget andet, ved du, hvor nemt det er at miste tidsfornemmelsen. Fjern distrakt mig Ikke mere behov for at gå tilbage til konsollen hvert par minutter for at tjekke, om den er færdig: værktøjet viser en meddelelse på skrivebordet, når en langvarig kommando er fuldført.
Dette lille script virker på Debian, Ubuntu og derivater, samt Arch LinuxSom standard betragter den enhver kommando, der tager mere end 10 sekunder, som "langvarig", og medmindre du ændrer den, advarer den dig kun, hvis det aktive vindue ikke er den terminal, hvor processen kører, netop for at undgå unødvendige distraktioner, når du allerede kigger på det vindue.
Hvad er Undistract-me, og hvordan fungerer det?
Undistract-me er dybest set et sæt shell-funktioner, der kobler sig til Bash-eksekveringscyklussen (og kan også integrere i Zshtil at registrere, hvornår en kommando starter og slutter. Når udførelsestiden overstiger en konfigurerbar tærskel, udløser den en skrivebordsbesked, og hvis du ønsker det, en lyd advarsel.
Scriptet definerer per design en standard timeout på 10 sekunder hvorfra en kommando betragtes som "lang". Denne værdi kan ændres, og en udelukkelsesliste kan også oprettes med kommandonavne, der ikke skal generere advarsler (f.eks. ls o cd Hvis du har tilpasset dem, tager de nogle gange et stykke tid.
Et andet vigtigt aspekt af dens funktion er den aktive vindueskontrol: Meddelelsen vises kun, hvis du ikke har terminalen i forgrunden.Hvis du foretrækker at blive underrettet alligevel, er der en miljøvariabel til at vende denne adfærd.
Projektet er open source, og dets kode er udgivet under en licens. ExpatHistorisk set blev udviklingen initieret af jml, og det hostes på platforme som Launchpad og GitHub. Under motorhjelmen bruger det et velkendt "hack" af preexec til Bash (inspireret af arbejdet af Glyf Lefkowitzog har modtaget bidrag fra folk som Chris Jones (Terminator), Mikey Neuling y Stephen Rothwell, hvilket forbedrede deres ydeevne og kvalitet.

Installation på Debian, Ubuntu og derivater
Den mest direkte måde i systemer Debian / Ubuntu Det er gennem standardarkiverne. Du skal blot installere pakken, og så er du klar til at linke den til din shell.
sudo apt update
sudo apt install undistract-me
I meget gamle versioner af Ubuntu var der en specifik PPA, i tilfælde af at du arbejdede med ældre miljøer, hvor apt Denne opdaterede pakke er ikke tilgængelig:
sudo add-apt-repository ppa:undistract-me-packagers/daily
sudo apt update
sudo apt install undistract-me
Når det er installeret, skal du "koble" scriptet til din shell. I Bash har du flere muligheder. Den enkleste tilføjer en linje med automatisk indlæsning til opstartsfilen:
echo 'source /etc/profile.d/undistract-me.sh' >> ~/.bashrc
Hvis du foretrækker den eksplicitte installation af hovedkomponenten plus hook-installationsprogrammet, kan du også skrive de to linjer i din ~ / .bashrc på denne måde:
echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.bashrc
Og husk at opdatere shell-sessionen for at anvende ændringerne med en kilde efter at have ændret opstartsfilerne.
source ~/.bashrc
Installation på Arch Linux og derivater (AUR)
I Arch-økosystemet er Undistract-me tilgængelig i AUR (normalt i varianten distraher-mig-gitDu kan kompilere den med din foretrukne AUR-hjælper eller manuelt med makepkgSom vejledning er disse almindelige kommandoer til hjælpere som mange brugere kender til:
pacaur -S undistract-me-git
packer -S undistract-me-git
yaourt -S undistract-me-git
Husk at nogle af disse hjælpefunktioner er forældede, men de tjener til at illustrere, at installationen udføres fra fællesskabets arkiv. Under alle omstændigheder, når den er installeret, aktivering For din shell gøres det ligesom i Debian/Ubuntu: ved at tilføje de tilsvarende linjer til din opstartsfil.
Aktivering og brug med Bash og Zsh
For Bash er der, udover de ovenfor viste variationer, en kompakt blok, som du kan inkludere i slutningen af ~ / .bashrc så scriptet indlæses, når det er passende:
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
I Zsh opnås integration på lignende måde ved at pege de samme linjer til filen. ~ / .zshrcDu kan dumpe det hele på én gang med denne kommando:
echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.zshrc
Efter redigering af en af disse filer, genindlæs konfiguration fra din nuværende shell, så ændringerne træder i kraft uden at du logger ud.
source ~/.bashrc
# o bien para Zsh
env zsh -l
# alternativamente
a source ~/.zshrc
Vigtigt: I mange terminalemulatorer skal du aktivere denne indstilling "Kør kommandoen som en login-shell". i GNOME Terminal Det er i Profilindstillinger > Titel og kommando; XFCE-terminalen Du finder den i Indstillinger > Generelt; og i Guake Den findes i Indstillinger > Generelt. Uden dette indlæses hook'en muligvis ikke korrekt.

Indstillinger: tid, undtagelser, aktivt vindue og lyd
Undistract-me styres primært fra filen /usr/share/undistract-me/long-running.bash og gennem miljøvariabler. Du kan åbne filen med din foretrukne editor og gennemgå de tilgængelige parametre.
For at ændre den minimale tid, hvorefter en kommando betragtes som "lang", skal du finde variablen LANGT_KØRENDE_KOMMAND_TIMEOUTStandardværdien er 10 (sekunder), men du kan indstille den til hvad der passer dig.
sudo nano /usr/share/undistract-me/long-running.bash
# Busca y ajusta:
# LONG_RUNNING_COMMAND_TIMEOUT=10
Hvis du ønsker bestemte kommandoer udløs aldrig notifikationer, tilføjer deres mellemrumsseparerede navne til variablen LANGLØBENDE_IGNORE_LISTEDet er nyttigt til at filtrere værktøjer fra, som du bruger konstant, og som du ikke ønsker skal forstyrre dig.
Hvis du derimod vil modtage notifikationer, selv når terminalen er det aktive vindue, skal du definere IGNORE_WINDOW_CHECK=1Dette deaktiverer kontrollen og altid Du vil se advarslen i slutningen af den lange kommando.
For at tilføje en lydalarm skal du justere variablen UDM_PLAY_SOUND til et heltal forskelligt fra nul. På Debian/Ubuntu-systemer kræver denne funktion, at du har installeret pulseaudio-værktøjer y lyd-tema-frigivet skrivebord, da det er afhængigt af skrivebordslyde-temaet.
sudo apt install pulseaudio-utils sound-theme-freedesktop
Efter ændringer i konfigurationsfilen eller miljøvariablerne, glem ikke genoplad din skal:
source ~/.bashrc
# o
source ~/.zshrc
Hurtige tests for at kontrollere, om det virker
Den enkleste måde at verificere dette på er at køre en kommando, der tager længere tid end 10 sekunder (eller den tærskel, du har sat). For eksempel kan du lave en ping til en vært på dit netværk eller udefra med et tilstrækkeligt antal pakker til at overskride tidsgrænsen.
ping -c 25 1.1.1.1
I Arch-miljøer er det også meget visuelt at bruge en kommando som sudo pacman -Syhvilket normalt tager et stykke tid afhængigt af spejlenes tilstand:
sudo pacman -Sy
Husk to vigtige ting: meddelelsen vises, når kommandoen har taget længere tid end tærsklen, og som standard kun hvis det aktive vindue er ikke terminalen hvor den kører. Hvis processen afsluttes før timeout, vil du ikke se en besked. Hvis du stadig ønsker at modtage den, skal du justere værdien af LANGT_KØRENDE_KOMMAND_TIMEOUT eller deaktiver vindueskontrol med IGNORE_WINDOW_CHECK.
Hurtige alternativer uden at installere noget ekstra
Selvom Undistract-me er meget praktisk, findes der minimalistiske løsninger, som du kun kan bruge, når du har lyst. underret-send (Dette er normalt inkluderet som standard i mange skriveborde.) Du kan tilføje en advarsel i slutningen af din kommando:
cat archivo && notify-send '¡Terminado!'
Hvis du foretrækker en mere synlig dialogboks, zenity Dette er en anden typisk mulighed i GTK-miljøer. Brugsmønsteret er lige så simpelt, og det viser et informationsvindue efter afslutning:
cat archivo && zenity --info --text='Proceso finalizado.'
Hurtigt trick: i stedet for && (som kun udfører den anden del, hvis den første lykkes), kan du kæde sammen med ; så notifikationen går igennem uanset hvad. Brug den med omhu afhængigt af situationen.
Der er flere alternativer og tilføjelser: fra værktøjer som NotiFyre selv terminaler med integrerede notifikationer (f.eks. Tilix (Den kan give dig besked, når panelet er inaktivt). Hvis du ønsker ekstra lyd og holder dig til det grundlæggende, er en gør-det-selv-mulighed at kæde en stemmemeddelelse sammen:
foo; spd-say 'tarea completada'
Og for dem, der stadig bruger systemets højttalertelefon, er der dem, der aktiverer den. pcspkr med et bip efter lange opgaver. Det er klodset, men effektivt i meget minimalistiske miljøer.
Tips til brug og fejlfinding
Hvis du ikke modtager notifikationer, skal du først kontrollere, om du har aktiveret muligheden for at "login-shell" i din terminalemulator. Uden denne indstilling indlæses Undistract-me muligvis ikke, og hook'en installeres muligvis ikke.
Tjek også, at din shell læser den korrekte fil (~ / .bashrc o ~ / .zshrcog hvad har du gjort kilde Efter redigering skal du tilføje en fejlfindingslinje (f.eks. en ekko) for at bekræfte, at filen udføres, når terminalsessionen starter.
Hvis du tænder for lyden og ikke hører noget, skal du kontrollere, om der er pulseaudio-værktøjer og fra pakken lyd-tema-frigivet skrivebordUd over lydstyrke- og lydserveren i din session. På meget minimalistiske skriveborde kan det være nødvendigt at starte PulseAudio manuelt eller bruge en anden backend.
For mange notifikationer til trivielle kommandoer? Juster LANGT_KØRENDE_KOMMAND_TIMEOUT til en højere værdi og udfyld LANGLØBENDE_IGNORE_LISTE med aliasser og værktøjer, som du ikke vil overvåge (f.eks. git status o docker ps hvis du gentager dem ofte).
Projekt- og fællesskabsdetaljer
Undistract-me-koden distribueres under Udlandslicens og har eksisteret på både Launchpad og GitHub. Den har ikke en dedikeret IRC-kanal, selvom den traditionelt har været tilgængelig på GitHub. JML i økosystemet af freenode (dengang, i #ubuntu-udvikling). Ved spørgsmål eller fejl er den rette kanal spørgsmål fra arkivet eller projektet på Launchpad.
En kuriøs omtale for dem, der nyder gears indre funktioner: støtten fra preexec Zsh-typen i Bash er ikke native, så scriptet bruger en hacke Et intelligent system, der udløser funktioner før og efter hver kommando. Takket være bidrag som dem fra Chris Jones (fra terminalen) Terminator) og optimeringer af Mikey Neuling y Stephen RothwellYdelsen er forbedret markant sammenlignet med de første versioner.
I daglig brug passer værktøjet særligt godt ind, når du kompilerer, konverterer multimedia, synkroniserer du store mængder data eller udfører handlinger af parcel De tager et stykke tid. Mønsteret er altid det samme: start kommandoen, skift vindue, og lad skrivebordet give dig besked, når det er færdigt.
Undistract-me leverer præcis, hvad det lover: mindre tid til at kigge på konsollen og mere fokus på det, du laver. Det er nemt at installere, finjusterer med et par variabler og integrerer godt med Bash og Zsh, hvilket gør det til et must-have for dem af os, der bruger halvdelen af vores liv i terminalen.