Opdrachten herhalen op Linux met of zonder wijzigingen

Het leven op de opdrachtregel op Linux is duidelijk iets dat de meesten van ons leuk vinden, maar het steeds opnieuw typen van hetzelfde commando kan vermoeiend worden. Om die verveling te voorkomen, legt dit bericht een aantal manieren uit waarop je herhalende commando’s – of herhalende commando’s maar met enkele wijzigingen – een stuk eenvoudiger kunt maken dan je zou verwachten.

De vorige opdracht opnieuw uitvoeren

Ten eerste is de gemakkelijkste manier om een ​​opdracht te herhalen, gewoon door te typen !!. Als u bijvoorbeeld bent ingelogd op een Linux-server en wacht tot een collega zich aanmeldt, wilt u misschien de wie onderstaande opdracht totdat u de gebruikersnaam van uw collega ziet. Typen !! na de initiaal wie commando zal dit voor u doen.

$ who | awk '{print $1,$2}'
shs pts/1
$ !!
shs pts/1
$ !!
shs pts/1
nemo pts/2	<== Yay, he just showed up!

Je commandogeschiedenis verkennen

Geschiedenisbestanden zijn over het algemeen vrij lang en bevatten vaak 1.000 opdrachten of meer. U kunt zien hoeveel opdrachten er voor uw account worden onthouden door deze opdracht te gebruiken:

$ echo $HISTSIZE
1000

U hoeft echter niet naar honderden of duizenden eerdere opdrachten te kijken wanneer u uw opdrachtgeschiedenis wilt bekijken. U kunt alleen de meest recente opdrachten bekijken door op te geven hoeveel eerdere opdrachten u wilt weergeven. Deze opdracht toont alleen de meest recente 5 opdrachten:

$ history 5
 1011   28/07/22 14:14:04 who | awk '{print $1,$2}'
 1012   28/07/22 14:15:18 vi timetable
 1013   28/07/22 14:15:43 who | awk '{print $1,$2}'
 1014   28/07/22 14:21:57 echo $HISTSIZE
 1015   28/07/22 14:24:39 history 5

Opdrachten uit uw opdrachtgeschiedenis opnieuw gebruiken

Een andere gemakkelijke manier om opdrachten te herhalen, is door naar uw opdrachtgeschiedenis te verwijzen door iets als de onderstaande opdrachten te typen, waardoor de opdracht opnieuw wordt uitgevoerd in uw geschiedenis commando-uitvoer nadat je het hebt gevonden met grepen typ vervolgens ! gevolgd door het volgnummer dat bij de opdracht hoort.

$ history | grep Sydney
865  27/07/22 12:02:50 date -d 'TZ="Australia/Sydney" 04:30 next Monday'
$ !865
date -d 'TZ="Australia/Sydney" 04:30 next Monday'
Sun Jul 31 02:30:00 PM EDT 2022

Opdrachten opnieuw uitvoeren met wijzigingen

U kunt opdrachten ook opnieuw uitvoeren, maar ze tijdens het proces wijzigen. Als u bijvoorbeeld “echo hallo there” typt, kunt u !! gevolgd door een : en de string die “there” vervangt door “world” om het opnieuw uit te voeren:

$ echo hello, there
hello, there
$ !!:s/there/world/
echo hello, world

In het geval van echo “hallo”, zou het gemakkelijker zijn om gewoon “echo hallo, wereld” te typen, maar voor veel commando’s zou dit niet het geval zijn. Als u bijvoorbeeld een kalender voor de maand augustus over een periode van een aantal jaren wilt bekijken, kunt u dit soort opdrachten uitvoeren (uitvoer niet getoond):

$ cal aug 2020
$ !!:s/020/021/
$ !!:s/1/2/ 

Onthoud dat !! herinnert aan de opdracht die werd uitgevoerd, niet wat u hebt getypt om het te maken. Dus de tweede opdracht vervangt “2020” door “2021” en de derde vervangt “2021” door “2022”.

U kunt op deze manier ook opdrachten uit uw opdrachtgeschiedenis hergebruiken. Hier is een voorbeeld waarin een opdracht in uw opdrachtgeschiedenis opnieuw wordt uitgevoerd en “vandaag” wordt vervangen door “morgen”:

$ !1012:s/today/tomorrow/

Opslaan van opdrachten in uw opdrachtgeschiedenis vermijden

U kunt ook beslissen niet om de opdrachten die u in uw huidige inlogsessie hebt gebruikt op te slaan in uw geschiedenisbestand door een opdracht als deze uit te voeren:

$ unset HISTFILE && exit

Met die opdracht wordt de sessie afgesloten zonder een van de opdrachten op te slaan.

U kunt ook de HISTIGNORE instelling om te voorkomen dat u opdrachten opslaat die veel gemakkelijker opnieuw te typen zijn dan in uw opdrachtgeschiedenis. U wilt bijvoorbeeld niet de moeite nemen om opdrachten op te slaan zoals: CD, ls, pwd, Doorzichtig, Mens of geschiedenis in uw .geschiedenis bestand omdat u waarschijnlijk niet naar uw opdrachtgeschiedenis zou verwijzen om ze opnieuw te gebruiken.

$ grep HISTIGNORE .bashrc
HISTIGNORE="cd:pwd:clear:ls:man:history"

Een opdrachtargument opnieuw gebruiken

Een andere interessante truc is om een ​​commando-argument opnieuw te gebruiken zoals in de volgende commando’s. De $_ in de tweede opdracht staat voor het laatste argument in de eerste opdracht. De onderstaande opdrachten maken een nieuwe map en gaan er vervolgens naar toe zonder dat u het mappad een tweede keer hoeft in te voeren.

$ mkdir /home/$USER/tools/mytools/settings
$ cd $_

De voorbeeldopdracht hieronder bevestigt dat: $_ legt alleen het laatste stuk tekst vast:

$ echo Have a nice day!
$ echo $_
day!

Een deel van een commando hergebruiken

Als je een reeks mappen wilt maken met namen die beginnen met de huidige datum, maar gevolgd door een reeks extra eindes, dan zou je een commando als dit kunnen gebruiken om het wat minder moeilijk te maken:

$ mkdir -v `date '+%Y%m%d'`_{reports,images,notes}	
mkdir: created directory '20220728_reports'
mkdir: created directory '20220728_images'
mkdir: created directory '20220728_notes'

De -v optie gebruikt met de mkdir opdracht geeft de bevestiging dat elke map is gemaakt.

Als u routinematig een directorystructuur moet maken zoals hierboven wordt weergegeven, is het waarschijnlijk een goed idee om van een dergelijke opdracht een alias te maken, zodat deze gemakkelijk opnieuw kan worden gebruikt.

Uw opdrachten opslaan als aliassen

Een van de gemakkelijkste manieren om opdrachten die u vaak gebruikt, vooral complexe opdrachten, te herhalen, is natuurlijk door ze eenvoudigweg in aliassen te veranderen en die aliassen op te slaan in uw .bashrc bestand zodat ze elke keer dat u inlogt beschikbaar zijn.

De onderstaande alias maakt een lijst van alle maanden van het jaar in hun juiste volgorde.

$ alias show_months="printf "%02d/01/2000n" {1..12} | LC_ALL=C date +%B -f-"
$ show_months
January
February
March
April
May
June
July
August
September
October
November
December

Vergeet niet om uw aliassen zinvolle namen te geven, zodat u ze kunt gebruiken zonder ernaar te hoeven zoeken in uw .bashrc bestand elke keer.

Inpakken

Er zijn veel manieren om Linux-commando’s, vooral complexe commando’s, gemakkelijker te herhalen te maken. Laten we het werken op de opdrachtregel leuk blijven maken.

Word lid van de Network World-community’s op Facebook en LinkedIn om commentaar te geven op onderwerpen die hoog in het vaandel staan.

Copyright © 2022 IDG Communications, Inc.

Leave a Comment