Linux bash-commando's leren. Een Linux-opdrachtregelinterpreter kiezen

Bash is de opdrachtshell, of met andere woorden, de opdrachtinterpreter die standaard in de meeste Linux-distributies wordt gebruikt. De Bash-shell heeft een heleboel functies. Meer dan een tolk, in de bekwame handen van Bash, kan het een complete programmeertaal worden.

De hoofdtaak van de shell is het uitvoeren van commando's, maar naast de hulpprogramma's in het bestandssysteem, heeft Bash zijn eigen set commando's, waarvan je er vele elke dag gebruikt zonder het te beseffen. Deze Bash-commando's staan ​​niet op schijf, maar ingebouwd in de shell zelf. In dit artikel zullen we de basis linux bash-commando's bespreken die in sommige situaties nuttig kunnen zijn.

Dit artikel zal geen erg lange introductie zijn en we gaan meteen aan de slag. Alle elementen van de lijst zijn in willekeurige volgorde gerangschikt. Nadat je ze allemaal hebt bekeken, zul je een beter begrip hebben van hoe Bash werkt.

1.bron

Met deze opdracht kunt u alle opdrachten uit het opgegeven bestand in de huidige opdrachtshell lezen en uitvoeren. Dit betekent dat alle omgevingsvariabelen die erin worden ingesteld, zichtbaar zijn in alle scripts of opdrachten die u uitvoert. Laat me je eraan herinneren dat als je een gewoon script uitvoert en er een variabele in declareert, het alleen voor hem beschikbaar zal zijn omdat er een aparte instantie van de shell wordt gemaakt voor de scripts. Het erft de variabelen van de ouder, maar niet andersom. Dit commando wordt vaak gebruikt om de omgeving bij te werken na een chroot:

bron / etc / profiel

2.alias

Met de opdracht alias kunt u aliassen maken voor andere opdrachten. U kunt bijvoorbeeld zo configureren dat wanneer u update typt, het commando sudo apt update && sudo apt upgrade wordt uitgevoerd. Als u de opdracht zonder parameters aanroept, wordt een lijst met reeds opgegeven aliassen weergegeven. Zie een apart artikel voor meer informatie over het maken.

3.binden

Met deze opdracht kun je een toetsaanslag koppelen aan een bepaalde opdracht of functie. Laten we bijvoorbeeld configureren dat de opdracht pwd wordt uitgevoerd wanneer u op F12 drukt in een terminalvenster:

binden "" \ e * NS *

maandag Dinsdag

En hier hebben we de namen van bestanden naar voren gebracht waarin het eerste teken de letter "m" of "t" is, de volgende tekens zijn willekeurig, dan de letter "d" en opnieuw willekeurige tekens.

Wees voorzichtig bij het gebruik van de asterisk in combinatie met de opdracht rm - dit kan leiden tot het verlies van uw gegevens. Met de volgende opdracht wordt alle inhoud van de huidige map verwijderd.

rm *

$ ls * dag

docl doc2 documenten

Het vraagteken (?) Geeft slechts één niet-gespecificeerd teken in bestandsnamen aan.

Dit gedeelte behandelt de volgende onderwerpen:

  • Interactie met shells en commando's
  • Commando's en commandoreeksen
  • Omgevingsvariabelen definiëren, gebruiken en exporteren
  • Opdrachtgeschiedenis en bewerkingstools
  • Opdrachten uitvoeren die zich in de omgevingsvariabele PATH en daarbuiten bevinden
  • Opdrachtvervanging gebruiken
  • Opdrachten recursief toepassen op een mappenboom
  • Man-pagina's gebruiken om informatie over commando's te vinden

Deze sectie beschrijft enkele van de basisfuncties van de bash-shell. Bijzondere nadruk wordt gelegd op de capaciteiten die vereist zijn voor certificering. De shell is een rijke omgeving en we verwelkomen verdere zelfonderzoek. Er zijn veel boeken geschreven over UNIX- en Linux-shells, en bash in het bijzonder.

bash-shell

Tolk bash een van de verschillende tolken die beschikbaar zijn op Linux. Het wordt ook wel B onze- een verdienen NS ell, naar Stephen Bourne, de maker van een vroege versie van de tolk ( / bin / sh Bash is in wezen sh-compatibel, maar introduceert veel verbeteringen, zowel functioneel als programmatisch. Het bevat de mogelijkheden van de Korn (ksh) en C (csh) tolken en wordt ontwikkeld als een POSIX-compatibele tolk.

Voordat we bash gaan leren, onthoud dat: tolk Is een programma dat opdrachten accepteert en uitvoert. Het ondersteunt ook programmeermogelijkheden, zodat u complexe constructies kunt samenstellen uit veelgebruikte opdrachten. Deze complexe constructies of scripts kunnen worden opgeslagen in bestanden, die op hun beurt weer nieuwe opdrachten zijn. Bovendien zijn veel commando's op een typisch Linux-systeem geïmplementeerd als shellscripts.

Tolken bevatten ingebed commando's zoals cd, break en exec. Andere commando's zijn: extern.

Tolken gebruiken ook drie standaard stromen ik / o:

  • standaard dit is standaard invoerstroom die input levert voor commando's.
  • stout dit is standaard uitvoerstroom, die de resultaten van de opdracht in een terminalvenster weergeeft.
  • stderr dit is standaard foutstroom, die fouten weergeeft die optreden tijdens het uitvoeren van opdrachten.

Invoerstromen leveren invoer voor programma's, meestal geassocieerd met een terminaltoetsenbord. Uitvoerstromen drukken teksttekens af, meestal naar een terminal. Terminal was oorspronkelijk een ASCII-schrijfmachine of videoterminal, maar is tegenwoordig vaak een venster op een grafisch bureaublad. De rest van dit gedeelte is gericht op omleiding op hoog niveau.

Als u een Linux-systeem zonder grafische interface gebruikt, of als u een terminalvenster in grafische modus hebt geopend, ziet u een opdrachtprompt zoals in Listing 1.

Lijst 1. Voorbeelden van typische aangepaste prompts

$
[e-mail beveiligd]:~>
$

Als je bent ingelogd als root (of superuser), kan je prompt eruitzien als Listing 2.

Listing 2. Voorbeeldprompts voor root of superuser

#
liervogel: ~ #
#

De rootgebruiker heeft veel macht, dus gebruik het met de nodige voorzichtigheid. Als u root bent, beginnen de meeste prompts met een hekje (#). Een uitnodiging voor een gewone gebruiker begint meestal met een ander teken, meestal een dollarteken ($). Uw uitnodiging kan afwijken van wat er in de voorbeelden in deze handleiding staat. Uw prompt kan uw gebruikersnaam, machinenaam, huidige map, datum of tijd waarop de prompt is afgedrukt, enzovoort bevatten.

Enkele conventies in deze gids

De handleidingen voor het developerWorks LPI-examen 101 en 102 bevatten code voor voorbeelden van echte Linux-systemen, waarbij de standaardprompts voor die systemen worden gebruikt. In ons geval begint de root-prompt met een #, zodat u deze kunt onderscheiden van gewone gebruikersprompts die beginnen met een $. Deze conventie is dezelfde als die in boeken over dit onderwerp wordt gebruikt. Let goed op de shell-prompt in elk voorbeeld.

Commando's en sequenties

Je zit in de dop, laten we eens kijken wat je nu kunt doen. De belangrijkste functie van shells is dat het uw opdrachten uitvoert waarmee u met het Linux-systeem communiceert. Op Linux- (en UNIX)-systemen bestaan ​​opdrachten uit de opdrachtnaam, opties en parameters. Sommige commando's hebben geen opties of parameters, andere hebben opties maar geen parameters, terwijl andere geen opties of parameters hebben.

Als de tekenreeks het #-teken bevat, worden alle volgende tekens erin genegeerd. Het #-symbool kan dus zowel het begin van een opmerking als een gebruikersprompt betekenen. Verdere interpretatie zal blijken uit de context.

Echo-team

Het echo-commando drukt een lijst met zijn argumenten af ​​naar de terminal, zoals weergegeven in Listing 3.

Lijst 3. Voorbeelden van het echo-commando

$ echo woord
Woord
$ echo EN zin
En het aanbod
$ echo Waar zijn de spaties?
Waar zijn de hiaten?
$ echo "Hier zijn de spaties." # en commentaar
En hier zijn de hiaten.

In het derde voorbeeld van Listing 3 zijn alle spaties tussen woorden in de uitvoer van de opdracht even groot geworden, één spatie. Om dit te voorkomen, moet u de string tussen aanhalingstekens plaatsen, met dubbele aanhalingstekens (“) of enkele aanhalingstekens (“). Bash gebruikt scheidingstekens zoals spaties, tabs en nieuwe regels om de invoerreeks in tokens te splitsen, die vervolgens aan uw opdracht worden doorgegeven. Het citeren van een string onderdrukt de begrenzing en is dus een enkele token. In het bovenstaande voorbeeld is elk token na de opdrachtnaam een ​​parameter, dus we krijgen respectievelijk 1, 2, 4 en 1 parameter.

Het echo-commando heeft verschillende opties. Meestal voegt echo een teken voor een nieuwe regel toe na de uitvoer. Gebruik de optie -n om te voorkomen dat er een nieuwe regel wordt toegevoegd. Gebruik de optie -e om het commando escape-reeksen te laten interpreteren.

Escape-reeksen en regeleinden

Er is een klein probleem bij het gebruik van een backslash in bash. Als het backslash-teken (\) niet wordt aangehaald, is het zelf een escape-reeks voor bash, waarbij de betekenis van het volgende teken behouden blijft. Dit is nodig voor speciale metatekens, waar we later op terug zullen komen. Er is één uitzondering op deze regel: een backslash gevolgd door een regelinvoer zorgt ervoor dat bash beide karakters inslikt en de reeks behandelt als een regelvoortzettingsverzoek. Dit kan handig zijn bij het opsplitsen van lange regels, vooral voor scripts.

Om ervoor te zorgen dat de hierboven beschreven reeksen correct worden verwerkt door het echo-commando of een van de vele andere commando's die vergelijkbare escape-besturingstekens gebruiken, moet u de escape-reeksen tussen aanhalingstekens plaatsen, of ze tussen aanhalingstekens plaatsen, of een andere gebruiken backslash om de interpretatie van symbolen te corrigeren. Listing 4 bevat voorbeelden van verschillende use-cases voor \.

Lijst 4. Voorbeelden van het gebruik van echo

$ echo -n Geen nieuwe regel
Geen nieuwe regel $ echo -e "Geen nieuwe regel \ c"
Geen nieuwe regel $ echo "De regel waarop u hebt geklikt
> Toets invoeren "
De regel waarop is geklikt
Enter toets
$ echo -e "Escaped string \ nnewline"
Ontsnapte tekenreeks
nieuwe lijn
$ echo "Een tekenreeks is geëscaped met een \ nnewline-teken, maar zonder de optie -e"
Een string met een \ nnewline escape-teken, maar zonder de -e optie
$ echo -e Dubbel \\ n \\ t backslash-metatekens
Dubbele metatekens
backslash
$ echo Backslash \
> gevolgd door Enter \
> dient als lijnvervolgverzoek.
Een backslash gevolgd door Enter dient als een prompt voor het vervolg van de regel.

Merk op dat bash een speciale prompt (>) weergeeft wanneer je een string met onvolledige aanhalingstekens hebt getypt. Uw invoerregel loopt terug naar de tweede regel en bevat een teken voor een nieuwe regel.

Bash-metatekens en besturingsoperators

Bash bevat verschillende tekens die, hoewel ze niet tussen aanhalingstekens staan, ook dienen om de invoerreeks in woorden te splitsen. Naast de spatie zijn dergelijke tekens ‘|’, ‘&’, ‘;’, ‘(‘, ‘)’, ‘<’, и ‘>’. We zullen enkele van deze symbolen in meer detail bespreken in andere secties van deze handleiding. Houd er voor nu rekening mee dat als u een metateken als onderdeel van uw tekst wilt opnemen, deze moet worden geciteerd of voorafgegaan door een backslash (\) zoals in Listing 4.

De nieuwe regel en de bijbehorende metatekens of metatekenparen dienen ook als controleverklaringen. Deze tekens zijn ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘|” '(', en ')'. Met sommige van deze besturingsinstructies kunt u reeksen of lijsten met opdrachten maken.

De eenvoudigste commandoreeks bestaat uit twee commando's gescheiden door een puntkomma (;). Elke volgende opdracht wordt uitgevoerd na de vorige. In elke programmeeromgeving retourneren commando's code die een normale of mislukte programmabeëindiging aangeeft; Linux-opdrachten retourneren over het algemeen 0 bij succes en niet-nul bij mislukking. U kunt voorwaardelijke verwerking uitvoeren met de besturingsoperatoren && en ||. Als u de twee opdrachten scheidt met de besturingsoperator &&, wordt de tweede opdracht alleen uitgevoerd als de eerste nul retourneert. Als je de commando's hebt gescheiden met ||, dan wordt het tweede commando alleen uitgevoerd als het eerste een niet-nulwaarde retourneert. Listing 5 bevat enkele commandoreeksen die het echo-commando gebruiken. Deze voorbeelden zijn niet erg interessant omdat echo 0 retourneert, maar we zullen naar meer voorbeelden kijken naarmate we meer commando's leren gebruiken.

Lijst 5. Opdrachten

$ echo lijn 1;echo lijn 2; echo lijn 3
lijn 1
lijn 2
lijn 3
$ echo lijn 1 && echo lijn 2 && echo lijn 3
lijn 1
lijn 2
lijn 3
$ echo lijn 1 || echo lijn 2; echo lijn 3
lijn 1
lijn 3

U kunt de shell verlaten met het exit-commando. Daarnaast kunt u als parameter een afsluitcode opgeven. Als u met de opdrachtinterpreter in een terminalvenster in grafische modus werkt, wordt deze in dit geval gewoon gesloten. Evenzo, als u bent verbonden met het externe systeem via ssh of telnet (bijvoorbeeld), wordt de verbinding verbroken. In bash kun je ook op Ctrl en d drukken om af te sluiten.

Laten we eens kijken naar een andere besturingsoperator. Als u een commando of lijst met commando's tussen haakjes plaatst, wordt het commando of de reeks commando's uitgevoerd in de kopie van de shell, dus het exit-commando verlaat de kopie van de shell en niet de shell waarin u zich momenteel bevindt werken. Listing 6 bevat eenvoudige voorbeelden met && en ||.

Lijst 6. Opdrachtinterpreters en opdrachtreeksen

$ (echo In de kopie van de interpreter; exit 0) && echo OK || echo Slecht afsluiten
In de kopie van de tolk
Oke
$ (echo In de kopie van de interpreter; exit 4) && echo OK || echo Slecht afsluiten
In de kopie van de tolk
Slechte uitgang

Blijf op de hoogte voor meer opdrachten in deze handleiding.

Omgevingsvariabelen

Wanneer u in bash werkt, wordt u omringd door een verzameling parameters waaruit uw omgeving bestaat, zoals het formaat van uw prompt, de naam van uw homedirectory, uw werkdirectory, de naam van uw interpreter, de bestanden die u opent, de functies die u definieert, enzovoort. Je omgeving bevat veel variabelen die zowel jij als bash kunnen instellen. Met Bash kunt u ook shell-variabelen maken die u naar uw omgeving kunt exporteren voor gebruik door andere processen die in de interpreter worden uitgevoerd, of andere interpreters die u vanuit de huidige interpreter kunt uitvoeren.

Zowel omgevingsvariabelen als shellvariabelen hebben een naam. U kunt naar de waarde van een variabele verwijzen door de variabelenaam vooraf te laten gaan door het teken '$'. Enkele van de meest voorkomende bash-omgevingsvariabelen staan ​​vermeld in Tabel 4.

  • GEBRUIKER De naam van de ingelogde gebruiker
  • UID De digitale ID van de ingelogde gebruiker
  • HUIS Thuismap gebruiker
  • PWD Huidige werkmap
  • SCHELP Shell naam
  • $ Proces-ID (of PID) van bash (of ander) proces
  • PPID De ID van het proces dat dit proces heeft voortgebracht (dat wil zeggen, de ID van het bovenliggende proces)
  • ? Laatste commando afsluitcode

Lijst 7 toont enkele van de bash-variabelen.

Lijst 7. Omgevings- en shell-variabelen

$ echo $ GEBRUIKER $ UID
ian 500
$ echo $ SHELL $ HOME $ PWD
/ bin / bash / home / ian / home / ian
$ (uitgang 0); echo $ ?; (uitgang 4); echo $?
0
4
$ echo $$ $ PPID
30576 30575

U kunt een shell-variabele maken of instellen door de naam van de variabele onmiddellijk te volgen met een gelijkteken (=). Variabelen zijn hoofdlettergevoelig, dus var1 en VAR1 zijn twee verschillende variabelen. Variabelen, vooral geëxporteerde variabelen, worden volgens afspraak in hoofdletters geschreven, maar dit is niet vereist. Formeel, $$ en $? zijn shell-parameters, geen variabelen. U kunt ernaar verwijzen, maar geen waarden toewijzen.

Wanneer u een shell-variabele maakt, wilt u deze vaak naar de omgeving exporteren zodat deze toegankelijk is voor andere processen die u vanuit de interpreter start. Variabelen die u exporteert, zijn niet beschikbaar voor bovenliggende tolken. Gebruik de opdracht export om een ​​variabele te exporteren. Voor het gemak kunt u in één stap een waarde toewijzen en een variabele exporteren.

Laten we, om de toewijzing en export te illustreren, nog een bash maken van de huidige bash-interpreter, en dan de Korn-interpreter starten vanaf (ksh) de bash die we hebben gemaakt. We zullen de opdracht ps gebruiken om informatie over lopende processen weer te geven. We zullen meer leren over de opdracht ps wanneer we het concept van processtatus later in deze zelfstudie onderzoeken.

Gebruik je geen bas?

De bash-interpreter is de standaard op veel Linux-distributies. Als je niet met bash werkt, kun je de volgende manieren overwegen om te oefenen met bash.

  • Gebruik het commando
    chsh -s / bin / bash
    om de standaardinterpreter te wijzigen. De wijzigingen worden van kracht de volgende keer dat u zich aanmeldt.
  • Opdracht
    su - $ GEBRUIKER -s / bin / bash
    zal een ander proces creëren dat een kind zal zijn van uw huidige tolk. Het nieuwe proces start het bash-inlogproces.
  • Maak een bash-gebruiker om je voor te bereiden op het LPI-examen.

Lijst 8. Omgevings- en shell-variabelen

$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
30576 30575 -bash
$ bash

PID PPID CMD
16353 30576 bash
$ VAR1 = var1
$ VAR2 = var2
$ export VAR2
$ export VAR3 = var3
$ VAR2 $ VAR3
var1 var2 var3
$ echo $ VAR1 $ VAR2 $ VAR3 $ SHELL
var1 var2 var3 / bin / bash
$ ksh
$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
16448 16353 ksh
$ export VAR4 = var4
$ echo $ VAR1 $ VAR2 $ VAR3 $ VAR4 $ SHELL
var2 var3 var4 / bin / bash
$ afsluiten
$ $ echo $ VAR1 $ VAR2 $ VAR3 $ VAR4 $ SHELL
var1 var2 var3 / bin / bash
$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
16353 30576 bash
$ afsluiten
$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
30576 30575 -bash
$ echo $ VAR1 $ VAR2 $ VAR3 $ VAR4 $ SHELL
/ bin / bash

Opmerking:

  1. Aan het begin van deze reeks had bash PID 30576.
  2. De tweede bash heeft PID 16353 en zijn bovenliggende PID 30576, wat de originele bash is.
  3. We hebben de variabelen VAR1, VAR2 en VAR3 in een tweede bash-instantie gemaakt, maar hebben alleen VAR2 en VAR3 geëxporteerd.
  4. In de Korn-interpreter hebben we VAR4 gemaakt. Het echo-commando geeft alleen de waarden van de variabelen VAR2, VAR3 en VAR4 weer en bevestigt dat VAR1 niet is geëxporteerd. Was je niet verrast toen de waarde van de SHELL-variabele niet is veranderd, ook al is de prompt veranderd? Je kunt niet altijd op SHELL vertrouwen om te vertellen met welke tolk je werkt, maar ps zal je precies vertellen wat wat is. Merk op dat ps een koppelteken (-) voor de eerste bash-instantie plaatst om ons te vertellen wat het is. originele schaal.
  5. In het tweede geval van bash kunnen we VAR1, VAR2 en VAR3 bekijken.
  6. Als we ten slotte terugkeren naar de oorspronkelijke interpretator, bestaat er geen enkele variabele in.

Eerder bespraken we de mogelijkheid om zowel enkele als dubbele aanhalingstekens te gebruiken. Er is een significant verschil tussen hen. De interpreter vervangt variabele tussen dubbele aanhalingstekens ($ ), maar vervangt niet als enkele aanhalingstekens (') worden gebruikt. In het vorige voorbeeld hebben we een nieuwe tolkinstantie van een andere gemaakt en een nieuwe proces-ID gekregen. De optie gebruiken: -C u kunt de opdracht doorgeven aan een andere interpreter, die de opdracht uitvoert en terugkeert. Als u een tekenreeks doorgeeft als een opdracht tussen enkele aanhalingstekens, zal een tweede instantie van de interpreter ze verwijderen en de tekenreeks verwerken. Bij gebruik van dubbele aanhalingstekens vindt variabele substitutie plaats daarvoor hoe de string wordt doorgegeven, dus de resultaten kunnen afwijken van wat u zou verwachten. De interpreter en het commando zullen een proces voortbrengen met zijn eigen PID. Lijst 9 illustreert deze concepten. De PID van de originele bash-interpreter is in een ander lettertype.

Lijst 9. Aanhalingstekens en shell-variabelen

$ echo "$ SHELL" "$ SHELL" "$$" "$$"
/ bin / bash $ SHELL 19244 $$
$ bash -c "echo Uitvouwen in bovenliggende $$ $ PPID"
Uitvouwen in bovenliggende 19244 19243
$ bash -c "echo Uitvouwen in kind $$ $ PPID"
Uitvouwen in kind 19297 19244

Tot nu toe zijn al onze variabelen geëindigd met een spatie, dus het was duidelijk waar de naam van de variabele eindigt. In feite kan een variabelenaam alleen uit letters, cijfers of het onderstrepingsteken bestaan. De interpreter weet dat de variabelenaam eindigt zodra een ander teken wordt aangetroffen. Soms is het nodig om variabelen te gebruiken in uitdrukkingen waarvan de betekenis dubbelzinnig kan zijn. In dergelijke gevallen kunt u accolades gebruiken om de variabelenaam te scheiden, zoals weergegeven in Listing 10.

Lijst 10. Krullende accolades gebruiken met namen van variabelen

$ echo "- $ HOME / abc-"
- / home / ian / abc-
$ echo "- $ HOME_abc-"
--
$ echo "- $ (HOME) _abc-"
- / home / ian_abc-

Env-opdracht

De opdracht env, zonder opties of parameters, geeft de huidige omgevingsvariabelen weer. U kunt het ook gebruiken om een ​​opdracht uit te voeren in een vooraf gedefinieerde omgeving. De optie -i (of gewoon -) wist de huidige omgeving voordat de opdracht wordt uitgevoerd, terwijl de optie -u omgevingsvariabelen wist die u niet wilt doorgeven.

Listing 11 bevat de gedeeltelijke uitvoer van het env-commando zonder parameters, gevolgd door drie voorbeelden die verschillende interpreters starten zonder een bovenliggende omgeving. Bekijk ze zorgvuldig voordat we ze bespreken.

Lijst 11. Het env-commando

$ env
HOSTNAME = mierenegel
TERM = xterm
SHELL = / bin / bash
HISTGROOTTE = 1000
SSH_CLIENT = 9.27.89.137 4339 22
SSH_TTY = / dev / pts / 2
GEBRUIKER = ian
...
_ = / bin / env
OLDPWD = / usr / src
$ env -i bash -c "echo $ SHELL; env"
/ bin / bash
PWD = / home / ian
SHLVL = 1
_ = / bin / env
$ env -i ksh -c "echo $ SHELL; env"
_ = / bin / env
PATH = / bin: / usr / bin
$ env -i tcsh -c "echo $ SHELL; env"
SHELL: Ongedefinieerde variabele.

Merk op dat bash de SHELL-variabele heeft ingesteld, maar deze niet naar de omgeving heeft geëxporteerd, hoewel bash drie andere variabelen in de omgeving heeft gemaakt. In het ksh-voorbeeld hebben we twee omgevingsvariabelen, maar onze poging om de waarde van de SHELL-variabele weer te geven resulteert in een lege regel. Ten slotte heeft tcsh geen omgevingsvariabelen gemaakt en een fout gegeven toen we probeerden de waarde van de SHELL-variabele te krijgen.

Variabelen instellen en op nul zetten

Lijst 11 laat zien hoe tolken zich gedragen bij het omgaan met variabelen en omgevingen. Hoewel deze gids zich richt op bash, moet u zich ervan bewust zijn dat niet alle tolken zich hetzelfde gedragen. Bovendien gedragen tolken zich verschillend, afhankelijk van of ze de originele shells zijn of niet. Voor nu zeggen we gewoon dat de originele shell de shell is die je krijgt als je inlogt; je kunt andere shells starten zodat ze zich als de originele gaan gedragen als je wilt. De drie tolken in het bovenstaande voorbeeld, gestart met het env -i commando, zijn geen native tolken. Probeer de -l optie door te geven om het verschil te zien bij het starten van de originele shell.

Laten we eens kijken naar onze poging om de waarde van de SHELL-variabele in deze shells weer te geven:

  • Toen bash opstartte, stelde het de SHELL-variabele in, maar exporteerde het niet automatisch naar de omgeving.
  • Toen ksh opstartte, werd de SHELL-variabele niet ingesteld. Het verwijzen naar een niet-gedefinieerde omgevingsvariabele is echter gelijk aan het verwijzen naar een lege waarde.
  • Toen tcsh begon, werd de SHELL-variabele niet ingesteld. In dit geval is het standaardgedrag anders dan ksh (en bash) en als gevolg daarvan is er een fout gegenereerd toen we probeerden toegang te krijgen tot de variabele.

U kunt de opdracht unset gebruiken om een ​​variabele uit te schakelen en deze uit de lijst met shell-variabelen te verwijderen. Als de variabele naar de omgeving is geëxporteerd, wordt deze ook uit de omgeving verwijderd. U kunt het set-commando gebruiken om het gedrag van bash (of andere interpreters) te regelen. Set is een ingebouwde opdracht in de tolk, dus de opties zijn specifiek voor de tolk. In bash vertelt de -u optie bash om geen fout te genereren bij het verwijzen naar niet-gedefinieerde variabelen, maar om ze als lege waarden te behandelen. U kunt verschillende opties toevoegen om in te stellen met - en ze uitschakelen met +. U kunt de huidige lijst met ingestelde opties weergeven met echo $ -.

Lijst 12. Uitschakelen en inschakelen

$ echo $ -
hemBH
$ echo $ VAR1
$ set -u; echo $ -
himuBH
$ echo $ VAR1
bash: VAR1: ongebonden variabele
$ VAR1 = v1
$ VAR1 = v1; echo $ VAR1
v1
$ VAR1 uitschakelen; echo $ VAR1
bash: VAR1: ongebonden variabele
$ set + u; echo $ VAR1; echo $ -
hemBH

U kunt het set-commando gebruiken zonder opties, die al uw shell-variabelen en hun waarden (indien aanwezig) zullen weergeven. Er is ook nog een ander commando, declare, waarmee u shell-variabelewaarden kunt maken, exporteren en weergeven. Je kunt de man-pagina's lezen voor andere opties van de set en commando's declareren. We zullen later in deze sectie naar de man-pagina's kijken.

Exec-commando

De laatste opdracht die we in deze sectie zullen bekijken, is exec. U kunt de opdracht exec gebruiken om een ​​andere opdracht uit te voeren die de huidige interpreter zal overschrijven. Listing 13 spawnt een bash-instantie en gebruikt vervolgens exec om deze te vervangen door de Korn-interpreter. Nadat u de Korn-interpreter hebt verlaten, bent u terug in de oorspronkelijke bash-interpreter (in dit voorbeeld PID 22985).

Lijst 13. Exec gebruiken

$ echo $$
22985
$ bash
$ echo $$
25063
$ exec ksh
$ echo $$
25063
$ afsluiten
$ echo $$
22985

Commando geschiedenis

Als je commando's hebt getypt terwijl je de handleiding leest, is het je misschien opgevallen dat bijna dezelfde commando's vaak worden gebruikt. Het goede nieuws is dat bash een geschiedenis van je commando's kan bijhouden. Geschiedenis is standaard ingeschakeld. Je kunt het uitschakelen met het commando set + o history en inschakelen met het commando set -o history. De omgevingsvariabele HISTSIZE vertelt bash hoeveel regels er moeten worden opgeslagen. Een reeks andere eigenschappen bepaalt hoe het verhaal zich gedraagt ​​en werkt. Zie de bash man-pagina's voor details.

Als je commando's hebt getypt terwijl je de handleiding leest, is het je misschien opgevallen dat bijna dezelfde commando's vaak worden gebruikt. Het goede nieuws is dat bash een geschiedenis van je commando's kan bijhouden. Geschiedenis is standaard ingeschakeld. Je kunt het uitschakelen met het commando set + o history en inschakelen met het commando set -o history. De omgevingsvariabele HISTSIZE vertelt bash hoeveel regels er moeten worden opgeslagen. Een reeks andere eigenschappen bepaalt hoe het verhaal zich gedraagt ​​en werkt. Zie de bash man-pagina's voor details.

Hier zijn enkele van de opdrachten die u kunt gebruiken om met geschiedenis te werken:

geschiedenis
Geeft de volledige geschiedenis weer
geschiedenisN
Geeft de laatste N regels van uw geschiedenis weer
geschiedenis -dN
Verwijdert regel N uit uw geschiedenis; dit kan worden gebruikt als u bijvoorbeeld de regel met het wachtwoord wilt verwijderen
!!
Je laatst ingevoerde commando
! N
Ny geschiedenis team
! -N
Het commando dat N stappen verwijderd is van het huidige commando in de geschiedenis (! -1 is equivalent !!)
!#
De huidige opdracht die u typt
! snaar
Meest recente opdracht die begint met string
!? snaar?
De meest recente opdracht die de tekenreeks bevat

U kunt een dubbele punt (:) gebruiken gevolgd door een specifieke waarde om een ​​opdracht in de geschiedenis te openen of te wijzigen. Lijst 14 toont enkele kenmerken van het verhaal.

Lijst 14. Geschiedenisbeheer

$ echo $$
22985
$ env -i bash -c "echo $$"
1542
$ !!
env -i bash -c "echo $$"
1555
$! ec
echo $$
22985
$!nl: s / $$ / $ PPID /
env -i bash -c "echo $ PPID"
22985
$ geschiedenis 6
1097 echo $$
1098 env -i bash -c "echo $$"
1099 env -i bash -c "echo $$"
1100 echo $$
1101 env -i bash -c "echo $ PPID"
1102 geschiedenis 6
$ geschiedenis -d1100

De commando's in Listing 14 doen het volgende:

1. De PID van de huidige tolk uitvoeren
2. Het echo-commando uitvoeren in een nieuwe instantie van de interpreter en de PID weergeven
3. Voer de laatste opdracht uit
4. Start de opdracht opnieuw, beginnend met 'ec'; het eerste commando in dit voorbeeld wordt uitgevoerd
5. Voer het laatste commando uit dat begint met 'en', maar vervang '$ PPID' door '$$', zodat de bovenliggende PID daadwerkelijk wordt weergegeven
6. Geef de laatste 6 geschiedenisopdrachten weer
7. Verwijder opdrachtnummer 1100, de laatste opdracht is echo

U kunt verhalen interactief bewerken. De bash-interpreter gebruikt de readline-bibliotheek om commando's en geschiedenisbewerkingen te besturen. Standaard zijn de toetsen en toetscombinaties die worden gebruikt om door de geschiedenis te navigeren of regels te bewerken, dezelfde als die worden gebruikt in de GNU Emacs-editor. In Emacs worden toetscombinaties meestal aangeduid met C-x of M-x, waarbij x een gewone toets is, en C en M respectievelijk Control- en Meta-toetsen zijn. Op een typische pc komt de Ctrl-toets overeen met de Emacs Control-toets en de Alt-toets met de Meta-toets. Extra functionaliteit, evenals de mogelijkheid om opties aan te passen met behulp van een readline init-bestand (meestal een inputrc in je homedirectory), zijn te vinden in de man-pagina's.

Als u de geschiedenis liever in de vi-modus beheert, gebruik dan de opdracht set -o vi om over te schakelen naar de vi-modus. U kunt terugschakelen naar de emacs-modus met de opdrachtset -o emacs. Wanneer u een opdracht in de vi-modus uitcheckt, bevindt u zich aanvankelijk in de vi-invoegmodus.

Paden

Sommige bash-commando's zijn ingebouwd, terwijl andere juist extern zijn. Laten we nu eens kijken naar externe commando's en hoe ze moeten worden uitgevoerd, en hoe we de interne commando's kunnen onderscheiden.

Waar zoekt de tolk naar commando's?

Externe opdrachten zijn bestanden in het bestandssysteem. Het gedeelte Eenvoudig bestandsbeheer van deze tutorial en de tutorial voor Topic 104 gaan in op de onderstaande details. Op Linux- en UNIX-systemen maken alle bestanden deel uit van een enorme boom, waarvan het paard /. In de bovenstaande voorbeelden was onze huidige directory de homedirectory van de gebruiker. Voor normale gebruikers bevinden hun homedirectory's zich in de / home directory, d.w.z. / home / ian in mijn geval. De hoofdmap van de root is / root. Nadat je een opdracht hebt getypt, zoekt bash ernaar in de lijst met standaard zoekmappen, een door dubbele punten gescheiden lijst van mappen die zijn opgeslagen in de omgevingsvariabele PATH.

Als je wilt weten welk commando wordt uitgevoerd als je een bepaalde regel afdrukt, gebruik dan het commando welke of typ. Lijst 15 toont mijn standaardpad en de locatie van verschillende opdrachten.

Lijst 15. Commandolocaties zoeken

$ echo $ PAD
/ usr / lokaal / bin: / bin: / usr / bin: / usr / X11R6 / bin: / home / ian / bin
$ welke bash env zip xclock echo set ls
alias ls = "ls --color = tty"
/ bin / ls
/ bin / bash
/ bak / env
/ usr / bin / zip
/ usr / X11R6 / bin / xclock
/ bin / echo
/ usr / bin / welke: geen set in (/ usr / local / bin: / bin: / usr / bin: / usr / X11R6 / b
in: / home / ian / bin)
$ type bash env zip xclock echo set ls
bash is / bin / bash
env is / bin / env
zip is / usr / bin / zip
xclock is / usr / X11R6 / bin / xclock
echo is een ingebouwde shell
set is een shell ingebouwd
ls is een alias naar `ls --color = tty'

Merk op dat alle mappen in het pad eindigen op / bin. Dit is een algemeen aanvaarde afspraak, maar geen vereiste. De welke opdracht meldde ons dat de opdracht ls een alias was en dat de opdracht set niet kon worden gevonden. In dit geval kan worden geïnterpreteerd dat de opdracht niet bestaat of is ingebouwd. Het type-commando vertelde ons dat het ls-commando eigenlijk een alias is, en het bepaalde ook dat het set-commando een ingebouwd shell-commando is; ze zei ook dat er een ingebouwde echo-opdracht is, en er is ook een opdracht in / bin die we hebben gevonden met de welke opdracht. Deze twee commando's voeren hun uitvoer anders uit.

We hebben gezien dat het ls-commando dat wordt gebruikt om de inhoud van mappen weer te geven, eigenlijk een alias is. Aliassen bieden een handige manier om commando's met verschillende sets opties te gebruiken, of gewoon om een ​​commando een andere naam te geven. In ons voorbeeld zorgt de optie –color = tty ervoor dat de lijst met directorybestanden wordt gemarkeerd, afhankelijk van het type bestanden en mappen. Probeer dircolors –print-database uit te voeren om de kleurcodes te zien en welke kleuren voor een bepaald bestandstype worden gebruikt.

Elk van deze commando's heeft extra opties. U kunt dit of dat commando gebruiken, afhankelijk van uw vereisten. Ik gebruik liever welke als ik zeker weet dat ik het uitvoerbare bestand zal vinden en ik alleen het volledige pad nodig heb. Het type-commando geeft me nauwkeurigere informatie die ik soms nodig heb in scripts.

Andere opdrachten uitvoeren

In Listing 15 zagen we dat het volledige pad van de uitvoerbare bestanden begint bij de hoofdmap /. Het xclock-programma is bijvoorbeeld eigenlijk / usr / X11R6 / bin / xclock, een bestand dat zich in de directory / usr / X11R6 / bin bevindt. Als het programma niet in de variabele PATH staat, kunt u het uitvoeren door het volledige pad naar het programma en het programma zelf op te geven. Er zijn twee soorten paden die u kunt gebruiken:

  • Absolute paden die beginnen met /, zoals we zagen in Listing 15 (/ bin / bash, / bin / env, enzovoort).
  • Relatieve paden zijn paden die relatief zijn ten opzichte van uw huidige werkdirectory, die u een naam kunt geven met het pwd-commando. Dergelijke commando's beginnen niet met /, maar bevatten minstens één /.

U kunt absolute paden gebruiken ongeacht uw huidige werkdirectory, maar u zult waarschijnlijk relatieve paden gebruiken wanneer de opdracht zich in de buurt van de huidige directory bevindt. Stel dat u een nieuwe versie van de klassieke "Hallo wereld!" ontwikkelt. in de mytestbin-submap van uw thuismap. Misschien wilt u een relatief pad gebruiken en de opdracht uitvoeren zoals mytestbin / hello. Er zijn twee speciale namen die je in een pad kunt gebruiken; een eenvoudige punt (.) verwijst naar de huidige map en een paar punten (..) die verwijst naar de bovenliggende map van de huidige map. Aangezien uw homedirectory niet in de PATH-omgevingsvariabele staat (en dat zou het ook moeten zijn), moet u een expliciet pad opgeven naar het bestand dat u vanuit uw homedirectory wilt uitvoeren. Als u bijvoorbeeld een kopie van het hello-programma in uw homedirectory hebt, kunt u eenvoudig de opdracht. / Hello gebruiken om het uit te voeren. Je kunt zoals gebruiken. en .. als onderdeel van een absoluut pad, hoewel single. is in dit geval niet erg handig. Je kunt een tilde (~) gebruiken om naar je homedirectory te verwijzen en ~ gebruikersnaam om naar de homedirectory van je gebruikersnaam te verwijzen, zie Listing 16 voor enkele voorbeelden.

Lijst 16. Absolute en relatieve paden

$ / bin / echo Gebruik echo commando in plaats van ingebouwd
Gebruik echo commando in plaats van ingebouwd
$ /usr/../bin/echo Bovenliggende map in pad opnemen
Bovenliggende map in pad opnemen
$ /bin/././echo Voeg een paar nutteloze padcomponenten toe
Voeg een paar nutteloze padcomponenten toe
$ pwd # Kijk waar we zijn
/ home / ian
$ ../../bin/echo Gebruik een relatief pad naar echo
Gebruik een relatief pad naar echo
$ myprogs / hallo # Gebruik een relatief pad zonder punten
-bash: myprogs / hallo: zo'n bestand of map bestaat niet
$ mytestbin / hallo # Gebruik een relatief pad zonder punten
Hallo Wereld!
$ ./hallo # Voer het programma uit in de huidige map
Hallo Wereld!
$ ~ / mytestbin / hallo # ren hallo met ~
Hallo Wereld!
$ ../hallo # Probeer hallo van ouder uit te voeren
-bash: ../hallo: zo'n bestand of map bestaat niet

Werkmap wijzigen

Net zoals u programma's uit verschillende mappen kunt uitvoeren, kunt u uw huidige werkmap wijzigen met het cd-commando. Het argument voor cd moet een absoluut of relatief pad naar een map zijn. U kunt ook de gebruikersnaam., .., ~ en ~ gebruiken in een opdracht bij het opgeven van paden. Als je cd typt zonder parameters, ga je naar je homedirectory. Het doorgeven van een enkele (-) als parameter betekent naar de vorige werkdirectory gaan. De homedirectory wordt opgeslagen in de HOME-omgevingsvariabele en de vorige directory wordt opgeslagen in de OLDPWD-variabele, dus cd is gelijk aan cd $ HOME en cd is gelijk aan cd $ OLDPWD. We praten meestal kort over het veranderen van directory in plaats van het volledig veranderen van de huidige werkdirectory.

Wat commando's betreft, is er de omgevingsvariabele CDPATH, die een door dubbele punten gescheiden lijst bevat van mappen die moeten worden doorzocht (naast de huidige werkmap) bij het oplossen van relatieve paden. Als de oplossing het pad van CDPATH gebruikt, zal cd het volledige pad van de gevonden map in de uitvoer afdrukken. Meestal gaat een succesvolle directorywisseling gepaard met het verschijnen van een nieuwe uitnodiging of een licht gewijzigde uitnodiging. Enkele voorbeelden worden getoond in listing 17.

Lijst 17. Directory wijzigen

$ cd /; pwd
$ cd / usr / X11R6; pwd
/ usr / X11R6
$ cd; pwd
/ home / ian
$ cd -; pwd
/ usr / X11R6
/ usr / X11R6
$ cd ~ ian / ..; pwd
/ huis
$ cd ~; pwd
/ home / ian
$ export CDPATH = ~
$ cd /; pwd
$ cd mijntestbin
/ home / ian / mijntestbin

Recursieve toepassing van opdrachten

Veel Linux-commando's kunnen recursief worden toegepast op alle bestanden in een directorystructuur. Het ls-commando heeft bijvoorbeeld een -R-optie om mappen recursief weer te geven, terwijl de cp-, mv-, rm- en diff-commando's een -r-optie hebben voor recursief.

Opdrachtvervanging

Bash heeft een extreem krachtig vermogen om het resultaat van het ene programma door te geven aan de invoer van een ander; dit wordt opdrachtvervanging genoemd. U kunt dit doen door het commando waarvan u de resultaten wilt, tussen apostrofs (`) te plaatsen. Als u meerdere geneste opdrachten gebruikt, kunt u de opdracht tussen $ (en) plaatsen.

In de vorige LPI 101: Linux Installation and Package Management tutorial zagen we dat het rpm-commando kan vertellen tot welk pakket welk commando behoort; het was handig om hier opdrachtvervanging te gebruiken. Nu weet je dat we het echt hebben gedaan.

Opdrachtvervanging is een hulpmiddel van onschatbare waarde bij het schrijven van scripts en bij gebruik op de opdrachtregel. Lijst 18 toont een voorbeeld van hoe je het absolute pad van een map kunt krijgen van een relatief pad, hoe je het pakket kunt vinden dat het /bin / echo-commando levert, en hoe (als root) de labels van de drie harde schijfpartities te bekijken . De laatste gebruikt de opdracht seq om een ​​reeks gehele getallen te maken.

Lijst 18. Opdrachtvervanging

$ echo "../../usr/bin" map is $ (cd ../../usr/bin;pwd)
../../usr/bin dir is / usr / bin
$ welke echo
/ bin / echo
$ rpm -qf `welke echo`
sh-utils-2.0.12-3
$ zo -
Wachtwoord:
# voor n in $ (seq 7 9); doe echo p $ n `e2label / dev / hda $ n`; klaar
p7 RH73
p8 SUSE81
p9 BEELDEN

Man-pagina's

In het laatste onderwerp van dit gedeelte van deze handleiding laten we u zien hoe u hulp kunt krijgen voor Linux-commando's met behulp van man-pagina's en andere soorten documentatie.

Man-pagina's en secties

De belangrijkste (en traditionele) bron van documentatie zijn de man-pagina's, die toegankelijk zijn met het man-commando. Figuur 1 toont de man-pagina voor het man-commando. Gebruik het man man commando om deze informatie te krijgen.

Figuur 1 toont enkele typische man-pagina-items:

* Kop met de opdrachtnaam tussen haakjes gevolgd door het sectienummer
* Commandonaam en andere soortgelijke commando's besproken in deze man-pagina
* Lijst met opties en parameters die van toepassing zijn op de opdracht
* Korte beschrijving van het team
* Gedetailleerde beschrijving van elke optie

U kunt ook secties vinden over het gebruik, het melden van bugs, informatie over de auteur en een lijst met andere opdrachten. De man-pagina voor man zegt bijvoorbeeld dat er extra commando's zijn (en hun handleidingen):

apropos (1), whatis (1), less (1), groff (1) en man.conf (5).

Er zijn gewoonlijk 8 secties die gemeenschappelijk zijn voor man-pagina's. De meeste pagina's worden meestal geïnstalleerd wanneer een pakket is geïnstalleerd, dus als het pakket niet is geïnstalleerd, zult u vrijwel zeker de man-pagina's missen. Bovendien kunnen sommige delen van de pagina's leeg of bijna leeg zijn. De meest voorkomende secties van de man-pagina's zijn:

1. Gebruikerscommando's (env, ls, echo, mkdir, tty)
2. Systeemaanroepen of kernelfuncties (link, sethostname, mkdir)
3. Bibliotheekfuncties (acosh, asctime, btree, locale, XML :: Parser)
4. Hardware-informatie (isdn_audio, muis, tty, nul)
5. Beschrijving van het bestandsformaat (keymaps, motd, wvdial.conf)
6. Games (merk op dat veel games nu in grafische modus worden uitgevoerd, dus ze kunnen hun eigen helpsysteem hebben, geen man-pagina's)
7. Diversen (arp, boot, regex, unix utf8)
8. Systeembeheer (debugfs, fdisk, fsck, mount, renice, rpm)

Andere secties kunnen 9 bevatten voor Linux-kerneldocumentatie, n voor nieuwe documentatie, o voor oude documentatie en l voor lokale documentatie.

Sommige vermeldingen kunnen in meer dan één sectie voorkomen. Onze voorbeelden lieten zien dat mkdir in secties 1 en 2 staat en tty in secties 1 en 4. U kunt een specifieke sectie definiëren, bijvoorbeeld man 4 tty of man 2 mkdir, of u kunt de -a optie gebruiken om alle man secties -pagina's.

Je kunt in de figuur zien dat de man veel opties heeft die je zelf kunt zien. Laten we voor nu even kijken naar de sectie "Zie ook"-commando's met betrekking tot de mens.

Zie ook

De twee belangrijkste geboden met betrekking tot de mens zijn wat is en wat is. Het whatis-commando zoekt in de man-pagina's naar de naam die u hebt opgegeven en geeft de naaminformatie weer van de overeenkomstige man-pagina's. Het apropos-commando doorzoekt de man-pagina's op trefwoorden en geeft de trefwoorden weer die uw woord bevatten. Lijst 19 presenteert deze commando's.

Lijst 19. Voorbeelden van whatis en apropos commando's

$ wat is man
man (1) - formatteren en weergeven van de online handleidingen
man (7) - macro's om man-pagina's op te maken
man (1) - formatteren en weergeven van de online handleidingen
man.conf (5) - configuratiegegevens voor man
$ wat is mkdir
mkdir (1) - mappen maken

$ apropos mkdir
mkdir (1) - mappen maken
mkdir (2) - maak een map aan
mkdirhier (1x) - maakt een directoryhiërarchie

Trouwens, als je de man-pagina voor man.conf niet kunt vinden, probeer dan man man.conf ig uit te voeren.

Het man-commando wordt door een speciaal paging-programma op het scherm afgedrukt. Op de meeste Linux-systemen zal dit programma minder zijn. Een andere optie zou het oudere programma kunnen zijn. Als u de pagina wilt afdrukken, gebruikt u de optie -t om de pagina op te maken en af ​​te drukken met groff of troff.

Het less output-programma heeft verschillende commando's om het gemakkelijker te maken om regels in de weergegeven tekst te vinden. Gebruik man less om meer te weten te komen over / (vooruit zoeken),? (achteruit zoeken) en n (voor de meest recente zoekopdracht), evenals vele andere opdrachten.

Andere bronnen van documentatie

Naast de man-pagina's die beschikbaar zijn vanaf de opdrachtregel, heeft de Free Software Foundation een groot aantal infobestanden gemaakt die door het info-programma worden verwerkt. Het heeft geweldige navigatiemogelijkheden, inclusief de mogelijkheid om naar een andere sectie te gaan. Typ man info of info info voor meer informatie. Niet alle commando's zijn gedocumenteerd in info, dus je kunt zowel man-pagina's als info gebruiken.

Er zijn verschillende grafische interfaces voor man-pagina's, zoals xman (van het XFree86-project) en yelp (de Gnome 2.0-helpbrowser).

Als u geen hulp kunt vinden voor de opdracht, probeer dan de opdracht uit te voeren met de optie –help. U kunt dus ontdekken wat u wilde of een hint krijgen waar u nog meer kunt zoeken.

De volgende sectie is gewijd aan het verwerken van tekststromen met behulp van filters.

Bash is een commandotaalinterpreter voor UNIX-compatibele systemen. Voert opdrachten uit vanaf standaardinvoer (zoals een terminalvenster) of vanuit een bestand. Bash bevat ook handige uitbreidingen voor de Korn- en C-shells (respectievelijk de ksh- en csh-opdrachten)

Syntaxis

bash [opties]

Opties

-C snaar Als deze parameter aanwezig is, wordt het commando gelezen vanaf de regel snaar... Als er aanvullende argumenten zijn in de doorgegeven opdracht, worden deze als positioneel beschouwd en beginnen ze bij $ 0. (Hoofdstuk Argumenten )
-l Interactief werk van de tolk
-l Bekijk INVOCATION hieronder
-R Beperkingen in het werk van de schaal. Bekijk RESTRICTED SHELL
-s Als deze parameter is opgegeven en alle vereiste argumenten zijn niet aanwezig, dan worden ze gelezen uit de standaardinvoer
-NS Een lijst van alle strings tussen dubbele aanhalingstekens met een $ beginnend wordt afgedrukt naar standaarduitvoer. Vereist om de vertaling te voltooien. Er worden geen opdrachten uitgevoerd
[-+]0[shopt_option]

shopt_option - extra shell-opties. Lees subsectie SHELL INGEBOUWDE COMMANDO'S. Als de gegeven optie aanwezig is6 dan -0 voordat het de gespecificeerde optie instelt en +0 het overschrijft. Als shopt_option niet is opgegeven, drukt +0 een lijst met de ingestelde opties af naar standaarduitvoer in een formaat dat opnieuw kan worden gebruikt als invoer.

-- Het signaleert het einde van de parameterinstelling. Eventuele parameters daarna worden behandeld als bestandsnamen en argumenten voor het script. De optie "-" is gelijk aan "-".

Bash biedt ook opties voor meerdere tekens. Ze moeten worden beschreven vóór degenen die uit één teken bestaan, zodat ze correct worden herkend.

--debugger Voert het debugger-profiel uit voordat het script wordt uitgevoerd. Schakelt de geavanceerde debugging-modus in (voor meer details, zie de beschrijving) extdebug) en voert de traceerfunctie uit
(zie parameterbeschrijving) -O).
--dump-po-string Gelijk aan -D, maar de uitvoer wordt geproduceerd in .po-bestandsindeling
--dump-strings Volledig vergelijkbaar met -D
--helpen snel
--init-bestand het dossier
--rcbestand het dossier Als de interpreter in interactieve modus wordt gestart, voert het de initialisatieopdrachten en het opgegeven bestand uit het dossier en niet uit het standaard init-bestand ~ / .bashrc.
--Log in gelijk aan -l
--niet bewerken
--geen profiel Lees geen systeembrede configuratiebestanden bij het opstarten van de shell / etc / profiel en alle lokale instellingenbestanden zoals ~ / .bash_profile, ~ / .bash_login of ~ / .profiel ... Standaard gebruikt bash ze wanneer het opstart in de login-modus (zie de INVOCATION-parameter voor details).
--norc Lees of voer het personalisatiebestand ~ / .bashrc niet uit bij het interactief opstarten. Standaard wordt deze parameter ingesteld wanneer de shell wordt gestart met het commando NS.
--posix Wijzig het standaardgedrag van bash wanneer een niet-POSIX-opdracht wordt aangetroffen (voor compatibiliteit)
--beperkt Shell-acties zijn beperkt (lees hieronder over de RESTRICTED SHELL-parameter)
--uitgebreid Hetzelfde als -v (uitgebreide uitvoer)
--versie Informatie over de huidige versie van de tolk afdrukken naar standaarduitvoer

Argumenten

Als er na het verwerken van de parameters argumenten zijn die niet zijn gekoppeld aan de parameters -c of -s, dan wordt het eerste argument beschouwd als de naam van het bestand dat het script met de opdrachten bevat. De naam van het bestand wordt geschreven naar $ 0 en de rest van de argumenten worden positiegewijs geschreven. Bash leest de scriptopdrachten, voert ze uit en sluit af. De voltooiingsstatus is gelijk aan de voltooiingsstatus van de laatst uitgevoerde scriptopdracht. Als er geen commando's zijn uitgevoerd, is de geretourneerde waarde "0". Eerst wordt geprobeerd een script uit de huidige map te openen, als het er niet is, wordt het opgegeven bestand doorzocht volgens de PATH-variabele voor scripts.

bash-oproep

Log in schelp- als het eerste teken na 0 is of de lancering wordt uitgevoerd met de parameter -login.

interactief schelp-interactief werk. Indien gestart zonder argumenten en zonder de parameter -c met standaard invoeruitvoer als terminal.app of gestart met de parameter -i.

Verwerking van initialisatiebestanden. Als een van de initialisatieparameterbestanden bestaat maar niet kan worden gelezen, meldt bash op Mac een fout.

Wanneer de bash wordt gestart in de interactieve of inlogmodus, worden eerst de opdrachten uit het bestand gelezen en uitgevoerd. / etc / profiel (indien aanwezig), dan wordt de aanwezigheid van bestanden gecontroleerd ~ / .bash_profile , ~ / .bash_login , en ~ / .profiel en als ze aanwezig en beschikbaar zijn, worden de commando's van hen uitgevoerd in dezelfde volgorde als waarin ze zijn vermeld. Om de verwerking van de bovenstaande bestanden over te slaan, kunt u de parameter --geen profiel

Als bash werd gestart in de login-modus, wordt het gecontroleerd en, indien beschikbaar, wordt het bestand uitgevoerd. ~ / .bash_logout .

Indien gestart in interactieve modus, zonder inlogmodus, wordt het bestand tijdens het opstarten bovendien uitgevoerd~ / .bashrc . Gebruik de parameter . om dit bestand uit te schakelen --norc of --rcbestand het dossier om het uitvoerbare bestand te vervangen door een ander ( het dossier).

Wanneer bash normaal wordt gestart, bijvoorbeeld om een ​​script uit te voeren, kijkt het naar de globale omgevingsvariabele BASH_ENV en gebruikt de waarde ervan om het uitvoerbare bestand te vinden.

Wanneer bash wordt aangeroepen met het commando NS, het probeert de oudste versie te gebruiken om compatibiliteit met de POSIX-standaard te garanderen. Als ze interactief worden aangeroepen of in --login-modus, worden bestanden eerst achtereenvolgens gelezen en uitgevoerd./ etc / profiel en ~ / .profiel , gebruik de parameter . om het gebruik van deze bestanden te verbieden --geen profiel... Ook wordt de waarde van de ENV-variabele interactief gelezen om deze te gebruiken als een pad om het uitvoerbare bestand te vinden. Wanneer gestart met het sh-commando, wordt de opstartoptie --rcfile genegeerd en kan deze niet worden gebruikt. Bij het opstarten in de standaardmodus worden geen configuratiebestanden gebruikt, de interpreter werkt in de POSIX-modus.

Wanneer bash wordt uitgevoerd in posix-modus met behulp van een optie op de opdrachtregel --posix de interpreter zal zich houden aan de POSIX-standaard voor initialisatiebestanden. In dit geval gebruikt de interactieve modus de waarde van de ENV-variabele, waarin de naam van het initialisatiebestand moet worden geschreven, er worden geen andere initialisatiebestanden uitgevoerd.