Hoe maak je aliassen en shell-functies aan onder Linux?
Het kennen van de opdrachtprompts en shell-scripts is nog steeds nodig als u het meeste uit het GNU / Linux-systeem wilt halen en hoe meer men op de opdrachtregel werkt, des te meer men zal merken dat de meerderheid van de gebruikte opdrachten zeer kleine subset van de beschikbare commando's. De meeste taken zijn normaal en de gebruiker kan deze elke dag op dezelfde manier uitvoeren.
Terwijl de makers van veel van de meest voorkomende opdrachthulpprogramma's hebben geprobeerd om overbodig typen te elimineren door verkorte namen te gebruiken, bijv. in plaats van lijst typen we 'ls"& In plaats van change-directory typen we"CD”. Bovendien moeten veel Linux-gebruikers vaak één opdracht steeds opnieuw gebruiken. Door dezelfde opdracht keer op keer te typen / kopiëren, wordt de productiviteit verminderd en wordt de gebruiker afgeleid van het daadwerkelijke werk.
Het zou geweldig zijn als we minder tijd zouden besteden aan het typen van die lange commando's. We hebben twee krachtige manieren om uw tijd op de opdrachtregel te minimaliseren shell aliassen en functies, door het gebruik van deze twee kan de gebruiker repetitieve taken temmen, langdurige processen verkorten en aangepaste commando's configureren met de opties die de gebruiker altijd gebruikt en moeite hebben om te onthouden.
U kunt uw opdrachten definiëren die zijn aangepast aan uw specifieke behoeften en om de last van repetitieve taken te verlichten.
Aliassen en shellscripts, d.w.z. functies, doen hetzelfde soort werk. Ze stellen je in staat om een set Bash-shell-functionaliteit te definiëren - en een naam te geven - die vervolgens kan worden opgeroepen met de naam die je eraan hebt gegeven. Het typen van de naam is gemakkelijker en handiger dan dat u elke keer dat u ze wilt gebruiken alle stappen of opdrachten moet typen.
Het verschil tussen een alias en een functie is er een van complexiteit en schaal. Scripts zijn beter in het bewaren van langere en uitgebreidere stukjes code. Aliassen zijn perfect voor het bevatten van kortere, beknoptere sets opdrachten.
Shell-aliassen
Een shell-alias is een aangepaste snelkoppeling om te verwijzen naar een opdracht of een reeks opdrachten die met of zonder aangepaste opties wordt uitgevoerd. Deze aliassen zijn alternatieve, gemakkelijk te onthouden namen voor lange opdrachten die u regelmatig moet uitvoeren. Wanneer u op de opdrachtregel typt, zoekt de shell eerst naar wat u hebt geschreven in de lijst met aliassen. Als er een overeenkomst wordt gevonden, wordt die vervangen door de alias met de bijbehorende tekst; na het voltooien van dat, zou het opnieuw naar de hele resulterende opdrachtregel kijken en deze uitvoeren.
De kans is groot dat u de aliassen op het Linux-systeem, aangezien de meeste Linux-distributies standaard ten minste enkele van de populaire aliassen toevoegen in “.bashrc ” bestand van het gebruikersaccount.
Beyond aliassen: Shell-functies
Blokken met vergelijkbare maar niet identieke codes kunnen niet worden vervangen door aliassen. Ze kunnen geen fouten afhandelen, geen aangepaste exitcodes retourneren, stroombeheer uitvoeren of variabelen gebruiken. Als je een van deze dingen moet doen, is het tijd om shell-functies te gebruiken.
Shell-functies zijn codeblokken die zijn gestructureerd als complete subscripts, eenmaal geschreven en worden aangeroepen vanuit elk script dat het nodig heeft.
Syntaxis van aliassen:
Het maken van aliassen in bash is heel eenvoudig. De syntaxis is als volgt:
alias alias_name = ”command_to_run”
Om een nieuwe bash-alias te maken in de huidige sessie
- Typ de "alias”
- Geef vervolgens de aliasnaam op
- Gevolgd door een gelijkteken
- En de opdracht die wordt uitgevoerd wanneer de alias wordt aangeroepen.
De opdracht moet tussen aanhalingstekens staan en mag geen spaties rond het gelijkteken bevatten. Spaties hier zullen het commando verbreken. Elke alias moet op een nieuwe regel worden gedeclareerd.
Laten we het verduidelijken door het voorbeeld. Op de Linux-opdrachtregel is een van de meest gebruikte opdrachten “ls”. Meestal wordt het "ls" -commando gebruikt met de "la”Schakelaar die alle bestanden en mappen met verborgen bestanden weergeeft in het formaat van de lange lijst. Nu gaan we een eenvoudige bash-alias maken "ll”Wat een snelkoppeling zal zijn naar hetls -la opdracht.
- Open een terminalvenster
- Type:
alias ll = "ls -la"
& druk op invoeren
- Typ nu in de console 'll”En druk op invoeren
- De uitvoer is hetzelfde als door ls -la te typen.
De hierboven gedefinieerde alias "ll" zal alleen beschikbaar zijn in de huidige shell-sessie. Als u de sessie sluit of een nieuw sessievenster gestart vanaf een andere terminal, zal de hierboven gedefinieerde alias "ll" niet beschikbaar zijn.
We zullen later bespreken hoe u de alias persistent kunt maken. De voorbeelden hier zijn voor de bash-shell, maar alle concepten en de meeste code zijn ook geldig voor andere shells.
Vooraf gedefinieerde aliassen
Sommige aliassen zijn voorgedefinieerd voor u. Om de lijst te kennen van alle aliassen die in het systeem zijn gedefinieerd, gebruiken we de opdracht "alias" zonder parameters:
alias
Dit zijn de aliassen op de Ubuntu-testmachine waarnaar dit artikel is onderzocht. Ook zouden alle op maat gemaakte aliassen in deze lijst verschijnen.
Er is een heleboel verschillende aliassen voor het ls-commando, en er is een groep aliassen die kleuruitvoer leveren aan de grep-familie van commando's, bijvoorbeeld met aliassen zoals hierboven gedefinieerd, telkens wanneer u typt:
grep
Het zal worden geïnterpreteerd als:
grep --color = auto
Dit toont een belangrijk punt aan met aliassen. Ze kunnen dezelfde naam hebben als bestaande opdrachten. Ze kunnen zelfs het oorspronkelijke commando in zichzelf bevatten.
Hier is de definitie van de grep-alias.
alias grep = 'grep --color = auto'
- Het alias-commando wordt gebruikt om een alias te definiëren.
- Vervolgens wordt de naam van de alias gegeven. In dit voorbeeld is het "grep".
- Het gelijkteken verbindt de naam van de alias met hetlichaam van de alias. Voor alle, behalve zeer eenvoudige aliassen, wordt de hoofdtekst van de alias tussen enkele aanhalingstekens geplaatst ‘.
- De body van de alias is de sectie die wordt uitgevoerd wanneer de alias op de opdrachtregel wordt gebruikt.
- De body van deze alias roept eenvoudig het grep-commando op met de optie –color = auto.
De Alert Alias
Bovenaan de vermelding wordt een ingewikkeld ogende alias genoemdalert. Even terzijde, en zodat u weet wat het doet, wordt de waarschuwingsalias gebruikt om u te laten weten wanneer een opdracht is voltooid. Het geeft ook aan of de opdracht met succes is voltooid of niet. Het biedt een grafische systeemwaarschuwing bovenaan het scherm.
Hier is een eenvoudig voorbeeld. Het slaapcommando zal vijf seconden slapen., De alarmalias zal dan worden gebeld. De alias controleert het antwoord van de vorige opdracht. Het haalt de laatste opdracht uit het geschiedenisbestand. Het bepaalt of de opdracht met succes is voltooid of niet. Vervolgens presenteert het de resultaten in een systeemwaarschuwing.
Als de opdracht is voltooid zoals verwacht, is het pictogram in de systeemwaarschuwing een klein terminalvenster. Als de opdracht een foutcode heeft geretourneerd, is het pictogram in de systeemwaarschuwing een rood foutpictogram.
slaap 5; alert
Na vijf seconden zien we deze systeemwaarschuwing:
Het pictogram is een klein terminalvenster, wat betekent dat alles goed is verlopen. Laten we dat nog eens proberen met een commando waarvan we weten dat het mislukt:
Gedoemd om te falen; alert
Onze systeemwaarschuwing heeft nu een foutpictogram.
Een triviale alias definiëren
Zoals we hebben gezien, gebruiken we de aliasopdracht om een alias te definiëren.
We gaan een pseudoniem maken voor het duidelijke commando. Onze alias zal cls heten en het zal het clear commando aanroepen.
Onze aliasdefinitie is zo triviaal dat er geen garantie is dat deze tussen enkele aanhalingstekens wordt geplaatst. Als de body van de alias complexer is dan dit, of als deze spaties bevat, plaats deze dan tussen enkele aanhalingstekens. We definiëren de alias, gebruiken ls om wat output in het terminalvenster te plaatsen en gebruiken dan onze nieuwe alias cls om het scherm leeg te maken.
alias cls = clear ls -l cls
Het scherm wordt gewist. Succes, zij het van korte duur. De alias zal alleen overleven zolang dit terminalvenster open blijft. Zodra het venster is gesloten, verdwijnt de alias.
Aliassen permanent maken door gebruik te maken van het ".bashrc" -bestand
U vraagt zich misschien af waar de voorverpakte aliassen zijn gedefinieerd. het staat in het ".bashrc" -bestand in uw thuismap. Dit bestand wordt gelezen en de opdrachten erin worden uitgevoerd wanneer u een interactieve shell start. Dat is wanneer u een terminalvenster opent.
Typ de volgende opdracht in uw thuismap om de inhoud van het ".bashrc" -bestand te zien met accentuering van de syntaxis.
gedit .bashrc
Hierdoor wordt hetgediteditor met het ".bashrc" -bestand erin geladen.
De gemarkeerde gebieden tonen twee gebieden waarin aliassen zijn gedefinieerd.
Als u door het document scrolt, worden twee andere secties met betrekking tot aliassen weergegeven:
De eerste hiervan is de definitie van de waarschuwingsalias. De tweede is een if-statement. Het vertaalt zich naar "als het bestand".bash_aliases"Bestaat, lees het in."
Als u maar een paar aliassen heeft die u wilt definiëren, kunt u deze in uw ".bashrc" -bestand plaatsen. Stop ze onder het gedeelte met de ls-aliassen.
Als je veel aliassen gaat maken, of als je het idee vindt om je aliassen in het eigen bestand te laten opnemen, dan kun je ze definiëren in je ".bash_aliases" -bestand. Een voordeel van het maken ervan in uw ".bash_aliases" -bestand is dat u niet per ongeluk de instellingen in het ".bashrc" -bestand kunt wijzigen. Een ander voordeel is dat uw aliassen gemakkelijk naar nieuwe systemen kunnen worden gekopieerd omdat ze zijn gescheiden van het ".bashrc" -bestand.
De alias moet een naam krijgen die gemakkelijk te onthouden is. Het wordt ook aanbevolen om een opmerking toe te voegen voor toekomstig gebruik.
Aliassen opslaan in het .bash_aliases-bestand
Het ".bash_aliases" -bestand bestaat niet standaard, u zult het moeten aanmaken. U kunt het bestand maken met deze opdracht:
raak .bash_aliases aan
Laten we het bestand bewerken en er een paar aliassen aan toevoegen. Deze opdracht opent het bestand “.bash_aliases” in de gedit-editor.
gedit .bash_aliases
We hebben drie aliassen toegevoegd. De eerste is onzeclsalias die we eerder hebben gebruikt. De volgende heeth. en is een verkorte manier om het geschiedeniscommando te noemen.
De derde alias wordt genoemdftc. Dit staat voor 'aantal bestandstypen'.
Deze alias is meer betrokken, dus het is verpakt in enkele aanhalingstekens. Het maakt gebruik van een reeks commando's die met elkaar zijn verbonden door pijpen. Het produceert een gesorteerde lijst van de verschillende bestandsextensies en directorynamen, met een telling voor elk lijstitem.
Als we het bestand “.bash_aliases” hebben opgeslagen, zouden we kunnen verwachten dat onze aliassen live en toegankelijk zijn. Dat is niet het geval. Het bestand moet worden ingelezen door de Bash-shell voordat de aliasdefinities live zijn. Dit wordt gedaan wanneer een interactieve shell wordt geopend.
We kunnen ook de ingebouwde Bash-shell gebruiken. om de opdrachten in een bestand te lezen en uit te voeren. Omdat ons ".bash_alias" -bestand wordt ingelezen wanneer ".bashrc" wordt verwerkt, moeten we onze test uitvoeren door ".bashrc" aan te roepen. Op die manier kunnen we controleren of het ".bash_alias" -bestand wordt aangeroepen vanuit ".bashrc" en dat onze aliassen levend en wel zijn.
De commando's die we hebben gebruikt zijn:
gedit .bash_aliases
Om het bestand “.bash_aliases” te bewerken.
. .bashrc
Dit zal de commando's in ".bashrc", die ".bash_aliases" zullen aanroepen, inlezen en uitvoeren.
ftc
Dit zal de ftc-alias aanroepen.
Onze alias reageert, wat betekent dat Bash zowel ".bashrc" als ".bash_aliases" heeft gelezen, en onze nieuwe aliassen zijn nu live.
U kunt nu doorgaan en nieuwe aliassen toevoegen aan het ".bash_aliases" -bestand wanneer ze bij u opkomen. Als je merkt dat je dingen meer dan een of twee keer doet, overweeg dan om er een alias voor te maken.
Aliassen verwijderen
Er is een commando om aliassen te verwijderen, zodat Bash ze niet herkent of erop reageert. Verfrissend openhartig wordt het commando aangeroepenunalias.
Om het te gebruiken, geeft u de naam op van de alias die u Bash wilt laten vergeten. Om Bash onze ftc-alias te laten vergeten, gebruikt u unalias, bijv. de eerder gebruikte 'll”Commando:
unalias ll
U kunt unalias gebruiken om aliassen die u hebt gedefinieerd en alle vooraf gedefinieerde aliassen te verwijderen.
Gebruik de optie -a (alles) om alle aliassen van uw systeem te verwijderen:
unalias -a
Het geheugenverlies van Bash zal echter niet permanent zijn. De volgende keer dat u een terminalvenster opent, zijn de "vergeten" aliassen terug. Om ze echt uit te wissen, moet u ze uit uw ".bashrc" en ".bash_alias" bestanden verwijderen.
Als je denkt dat je ze ooit terug zou willen hebben, verwijder ze dan niet uit je ".bashrc" -bestand. Geef ze in plaats daarvan commentaar door een hekje # toe te voegen aan het begin van elke aliasregel. Om uw ".bash_alias" -bestand ondoeltreffend te maken, moet u het een andere naam geven. Als uw ".bashrc" -bestand het niet kan zien, wordt het niet ingelezen. Het is een triviale zaak om deze stappen ongedaan te maken om uw aliassen te herstellen.
Om tijdelijk een alias te omzeilen (laten we zeggen dat we ls naar ls -a hebben gealiast), kunnen we typen:
\ ls
Resulterend zou het normale commando worden aangeroepen, niet de alias-versie.
Help voor Alias-opdracht:
- –Hulpoptie: Het geeft Help-informatie weer.
Syntaxis:
alias --help
Shell-functies
Soms is een alias vereist die een of meer argumenten zou kunnen accepteren, dat wil zeggen wanneer bash-functies worden gebruikt.
Syntaxis
Het maken van een bash-functie is niet erg moeilijk. Ze kunnen worden gedeclareerd in een van de volgende twee verschillende formaten:
functienaam () {[opdrachten]}
of
functie functienaam {[opdrachten]}
We kunnen dit tweede formulier tot één regel comprimeren en de opdrachten scheiden met puntkomma's. Een puntkommamoet kom ook na het laatste commando:
functienaam () {command1; command2; }
Lika-aliassen, Bash-shell-functies kunnen worden gedefinieerd in het ".bashrc" -bestand, maar het is vaak netter om ze in hun eigen definitiebestand te plaatsen. We zullen het ".bash_functions" noemen, volgens de conventie die wordt gebruikt voor het ".bash_aliases" -bestand.
Dat betekent dat we het ".bashrc" -bestand moeten vertellen om in onze definities te lezen. We kunnen het codefragment dat in het bestand ".bash_aliases" wordt gelezen, kopiëren en wijzigen. Start gedit en laad het ".bashrc" -bestand met deze opdracht:
gedit .bashrc
U moet het gemarkeerde gedeelte toevoegen dat hieronder wordt weergegeven.
U kunt de aliassectie markeren en op Ctrl + C drukken en vervolgens naar de plaats gaan waar u de nieuwe sectie wilt hebben en op Ctrl + V drukken om een kopie van de tekst te plakken. Het enige dat u hoeft te doen, is de twee plaatsen waar '.bash_aliases' staat te wijzigen in '.bash_functions'.
We kunnen die wijzigingen opslaan en gedit sluiten.
Nu gaan we het ".bash_functions" -bestand maken en bewerken, en er een functiedefinitie in plaatsen.
raak .bash_functions gedit .bash_functions aan
Dit opent het lege “.bash_functions” -bestand in gedit.
We gaan een eenvoudige functie toevoegen die wordt opgeroepen. up heeft een enkele opdrachtregelparameter nodig, namelijk een cijfer. up zal dan cd .. dat aantal keren bellen. Dus als je het commando hebt gebruikt
omhoog 2
up zou cd .. twee keer aanroepen en zou twee niveaus omhoog gaan in de directorystructuur.
Er zijn verschillende manieren om een functie te definiëren. Hier is er een:
functie omhoog () {
De woordfunctie is optioneel. Als je een traditionalist bent, gebruik het dan, als je geen zin hebt om het in te typen, laat het dan weg.
Hier is onze hele functie in gedit:
functie omhoog () {
Dit markeert het begin van onze functiedefinitie en geeft de functie een naam.
niveaus = $ 1
Dit creëert een variabele met de naamniveaus en stelt deze in op de waarde van de eerste parameter. Deze parameter wordt een cijfer dat door de gebruiker wordt opgegeven wanneer ze de functie aanroepen. De $ 1 betekent "eerste opdrachtregelparameter".
while ["$ levels" -gt "0"]; Doen
We voeren dan een lus in die zich vertaalt als "wanneer de"waarde"Van"niveaus"Is positief of groter dan nul, doe dan wat er in de body van de lus staat."
Binnen de body van de lus hebben we twee opdrachten. Zij zijn:
cd ..
Ga een niveau omhoog in de directorystructuur.
levels = $ (($ levels - 1))
Stel niveaus in op een nieuwe waarde, die één lager is dan de huidige waarde.
We gaan dan terug naar de bovenkant van de lus, de vergelijking tussen de waarde van niveaus en nul wordt opnieuw gemaakt. Als "levels" meer is dan nul, wordt de body van de lus opnieuw uitgevoerd. Als het niet positief is of groter dan nul, is de lus voltooid en gaan we door naar de opdracht gedaan en is de functie voorbij.
Sparen deze veranderingen en sluitengedit.
We zullen de commando's in ".bashrc" inlezen en uitvoeren die de commando's in ons ".bash_functions" -bestand zouden moeten inlezen en uitvoeren.
. .bashrc
We kunnen de functie testen door naar een locatie in de directorystructuur te gaan en omhoog te gebruiken om terug te gaan naar een "hoger" punt in de directorystructuur.
cd ./work/backup/ up 2
De functie werkt. We zijn twee directoryniveaus hoger in de structuur geplaatst.
Bijhouden met type
Als u een reeks aliassen en een bibliotheek met functies opbouwt, kan het moeilijk worden om te onthouden of een bepaalde opdracht een alias of een functie is. U kunt de "type" commando om u eraan te herinneren. Het leuke hier is dat je ook de definitie te zien krijgt.
Laten we typen gebruiken op onzeftcalias en onze up-functie.
typ ftc type omhoog
We krijgen een zeer nuttige herinnering aan wat voor soort commando elk is, samen met hun definities.
Begin met verzamelen
Aliassen en functies kunnen uw gebruik van de opdrachtregel enorm versnellen. Ze kunnen commandoreeksen verkorten, en ze laten je de opties die je altijd gebruikt met standaard commando's inbakken. Elke keer dat u een handige one-liner of handige functie ziet, kunt u deze aanpassen en personaliseren, en vervolgens toevoegen aan uw ".bash_aliases" of ".bash_functions" -bestanden. Veelvuldig gebruik hiervan kan helpen om uw tijd in de shell aangenamer en minder complex te maken.
Denk eraan om op uw hoede te zijn voor het herdefiniëren van bestaande commando's met gedrag dat potentieel destructief is.Zelfs als je het tegenovergestelde doet en een commando naar een veiligere variant toewijst (bijvoorbeeld altijd om bevestiging vragen voordat je het recursief verwijdert), kan het terugkomen om je te bijten als je voor het eerst een systeem gebruikt zonder het als je er eenmaal op vertrouwt . Om kandidaten te vinden waarvoor u wellicht aliassen kunt maken, is het misschien een goed idee om in uw geschiedenis te zoeken naar uw meest gebruikte opdrachten.