Bash/Builtin: Unterschied zwischen den Versionen

Aus Foxwiki
 
(55 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Beschreibung =
'''Builtins''' - Kommandos, die von der Shell bereitgestellt werden
Es liegt wohl in der Natur des Linux-Neulings, seine Testprogramme und -skripten «"test« zu benennen (eigentlich kann ich mich an keinen Linuxkurs erinnern, indem nicht mindestens einer der Teilnehmer auf diese Weise mit den builtin Kommandos der Bash konfrontiert wurde).


Nach verrichteter Arbeit zeigte der Testlauf:
== Beschreibung ==
'''ls -l test'''
; Kommandos, die von der Shell bereitgestellt werden
-rwxr-xr-x  1  user    users      12177 Sep 23 10:52 test
* Eingebaute Befehle (Builtins)
'''test'''
* Kein eigener Prozess
* Von der Shell interpretiert und ausgeführt


Mit Kenntnis des Vorgehens der Bash bei der Suche nach einem Kommando, gelangt man bald zum Schluss, dass sich ein builtin Kommando vorgedrängelt hat.
; Intern/Extern
Manchmal gibt es eine eingebaute und eine externe Version
'echo' (intern) und '/bin/echo' (extern)


Es gibt eine Fülle solcher eingebauter Kommandos und mindestens 4 Gründe, warum solche in der Bash überhaupt existieren: # Weil es ein solches Kommando in Unix nicht gibt (Beispiel "source")
=== Gründe für eingebauten Befehlen ===
# Weil ein builtin Kommando effizienter arbeitet, als ein externes Kommando (keine Prozesserzeugung notwendig; Beispiel »echo«)  
# Befehl nicht als Unix-Kommando verfügbar
# Weil nur ein eingebautes Kommando Bash-interne Variablen ändern kann (Beispiel »export«)  
#* Beispielsweise ''source''
# Weil ein Kommando wie »exec« nur innerhalb der Bash realisierbar ist  
# Weil ein builtin Kommando effizienter arbeitet
#* als ein externes Kommando (keine Prozesserzeugung notwendig; Beispiel »echo«)
# Weil nur ein eingebautes Kommando Bash-interne Variablen ändern kann (Beispiel »export«)
# Weil ein Kommando wie »exec« nur innerhalb der Bash realisierbar ist


Betrachten wir die einzelnen builtin-Kommandos:
=== Arten von builtin ===
* Etliche der besprochenen Shell-Kommandos starten nicht, wie sonst üblich, einen eigenen Prozeß, sondern sie werden direkt von der Shell interpretiert und ausgeführt.
* Teilweise ist keine E/A-Umleitung möglich. Etliche Kommandos der folgenden Auswahl wurden schon besprochen.
* Andere werden weiter unten behandelt. Zum Teil gibt es interne und externe Versionen, z. B. 'echo' (intern) und '/bin/echo' (extern).


{|class="wikitable sortable"  
=== Was wird gestartet? ===
* [[type]]
* [[whereis]]
 
=== Builtins ein- und ausschalten ===
 
== Übersicht ==
{| class="wikitable sortable"
|-
! Befehl !! Beschreibung
|-
| [[Null]] ||
|-
| [[source]] ||
|-
| [[alias]] || Definition einer Abkürzung für ein Kommando
|-
| [[jobs]] || Listet die Jobnummern aller Hintergrundprozesse auf
|-
| [[bind]] ||
|-
| [[break]] ||
|-
| [[cd]] || Verzeichnis wechseln
|-
| [[command]] ||
|-
| [[compgen]] ||
|-
| [[complete]] || Verhalten der Bash bei der Vervollständigung steuern
|-
| [[continue]] ||
|-
| [[declare]] || Deklarieren von Variablen
|-
| [[dirs]] || Anzeige des Verzeichnisstacks
|-
| [[disown]] ||
|-
| [[echo]] || Eine Zeile Text anzeigen
|-
| [[enable]] || Eingebauten Kommandos der Shell aktivieren
|-
| [[eval]] || Liest seine Argumente, wobei die üblichen Ersetzungen stattfinden, und führt die resultierende Zeichenkette als Kommando aus.
|-
| [[exec]] || Das Kommando besitzt zwei Bedeutungen.
|-
| [[exit]] || Beendet die Shell
|-
|-
| | '''break'''
| [[export]] || Exportieren von Variablen
| | Schleife verlassen
|-
|-
| | '''continue'''
| [[fc]] || Manipulation der History-Einträge
| | Sprung zum Schleifenanfang
|-
|-
| | '''echo'''
| [[fg]] || holt einen Hintergrundprozess in den Vordergrund
| | Ausgabe
|-
|-
| | '''eval'''
| [[getopts]] ||
| | Mehrstufige Ersetzung
|-
|-
| | '''exec'''
| [[hash]] ||
| | Überlagerung der Shell durch ein Kommando
|-
|-
| | '''exit'''
| [[help]] || Schreibt einen kurzen Hilfetext zu einem eingebauten Kommando aus.
| | Shell beenden
|-
|-
| | '''export'''
| [[history]] || Kommandozeilenspeicher anzeigen
| | Variablen für Subshells bekannt machen
|-
|-
| | '''read'''
| [[kill]] || Signale an Prozesse senden
| | Einlesen einer Variablen
|-
|-
| | '''shift'''
| [[let]] || Für jedes Argument wird eine arithmetische Substitution versucht
| | Parameterliste verschieben
|-
|-
| | '''trap'''
| [[local]] || Definition lokaler Variablen
| | Behandlung von Signalen
|-
|-
| [[logout]] || Beendet eine Login-Bash und meldet den Benutzer ab. In einer Nicht-Login-Bash wird eine Fehlermeldung ausgegeben.
|-
| [[popd]] || Entfernt den obersten Eintrag vom Verzeichnisstack und wechselt zum neuen obersten Verzeichniseintrag.
|-
| [[printf]] ||
|-
| [[pushd]] || Mit dem Kommando kann in ein angegebenes Verzeichnis gewechselt werden, wobei das Verzeichnis auf einem Stack abgelegt wird
|-
| [[pwd]] || Gibt das aktuelle Arbeitsverzeichnis aus
|-
| [[read]] ||
|-
| [[readonly]] || Variablen und Funktionen lassen sich nachträglich als »nicht änderbar« deklarieren.
|-
| [[return]] || Rücksprung aus einer Funktion
|-
| [[set]] || Setzen bash-interner Variablen
|-
| [[shift]] || Verschieben der Positionsparameter
|-
| [[shopt]] || Dient zum Setzen bash-interner Variablen, die das Verhalten der Shell maßgeblich beeinflussen
|-
| [[suspend]] || Suspendiert die Shell. Sie kann nur durch ein Signal SIGCONT reaktiviert werden.
|-
| [[test]] || Bedingungen prüfen
|-
| [[time]] || Report time consumed by pipeline's execution
|-
| [[times]] || Zeit der Shell und von ihr gestarteter Kommandos messen
|-
| [[trap]] ||
|-
| [[type]] ||
|-
| [[typeset]] || declare
|-
| [[ulimit]] ||
|-
| [[umask]] || Zugriffsrechte für neue Dateien steuern
|-
| [[unalias]] || Löschen von Aliasen
|-
| [[unset]] || Löschen einer Variable oder Funktion
|-
| [[wait]] || Warten auf einen oder alle Hintergrundprozesse
|}
|}


* Bei der Suche nach Kommandos betrachtet die Shell Aliasse und Funktionen noch vor den eingebauten Kommandos. Überdeckt nun ein solcher Name ein builtin-Kommando, so wird beim einfachen Aufruf immer der Alias bzw. die Funktion ausgeführt werden.
== Syntax ==
* Mit vorangestelltem builtin weist man nun die Bash an, auf jeden Fall ihr eingebautes Kommando aufzurufen.
<syntaxhighlight lang="bash" highlight="1" line>
* Der Rückgabestatus ist gleich dem Rückgabewert des Builtin's oder "falsch", falls das Kommando kein builtin ist.
 
= Null =
siehe '''[[Linux:Shell:Bash:Builtin:null]]'''
 
= source =
siehe '''[[Linux:Shell:Bash:Builtin:source]]'''
 
= alias  =
Definition einer Abkürzung für ein Kommando
* siehe '''[[Linux:Shell:Bash:Builtin:alias]]'''
 
= jobs  =
Listet die Jobnummern aller Hintergrundprozesse auf.
* siehe '''[[Linux:Shell:Bash:Builtin:jobs]]'''
 
= bind  =
siehe '''[[Linux:Shell:Bash:Builtin:bind]]'''
 
= break  =
siehe '''[[Linux:Shell:Bash:Builtin:break]]'''
 
= cd =
siehe '''[[Linux:Shell:Bash:Builtin:cd |Verzeichnis wechseln]]'''
 
= command  =
siehe '''[[Linux:Shell:Bash:Builtin:command]]'''
 
= compgen =
siehe '''[[Linux:Shell:Bash:Builtin:compgen]]'''
 
= complete  =
Mit diesem Kommando kann das ganze Verhalten der Bash bei der Vervollständigung von Argumenten verändert werden
* siehe '''[[Linux:Shell:Bash:Builtin:complete]]'''
 
= continue =
siehe '''[[Linux:Shell:Bash:Builtin:continue]]'''
 
= declare =
Deklarieren von Variablen
* siehe '''[[Linux:Shell:Bash:Builtin:declare]]'''
 
= dirs =
Anzeige des Verzeichnisstacks
* siehe '''[[Linux:Shell:Bash:Builtin:dirs]]'''
 
= disown =
siehe '''[[Linux:Shell:Bash:Builtin:disown]]'''
 
= echo =
Eine Zeile Text anzeigen
* siehe [[Linux:Shell:Bash:Builtin:echo]]
* siehe [[Linux:Befehl:echo]]
 
= enable  =
Eingebauten Kommandos der Shell aktivieren
* siehe '''[[Linux:Shell:Bash:Builtin:enable]]'''
 
= eval  =
Liest seine Argumente, wobei die üblichen Ersetzungen stattfinden, und führt die resultierende Zeichenkette als Kommando aus.
* siehe '''[[Linux:Shell:Bash:Builtin:eval]]'''
 
= exec  =
* Das Kommando besitzt zwei Bedeutungen.
* siehe '''[[Linux:Shell:Bash:Builtin:exec]]'''
 
= exit  =
Beendet die Shell
* siehe '''[[Linux:Shell:Bash:Builtin:exit]]'''
 
= export  =
Exportieren von Variablen
* siehe '''[[Linux:Shell:Bash:Builtin:export]]'''
 
= fc  =
Manipulation der History-Einträge
* siehe '''[[Linux:Shell:Bash:Builtin:fc]]'''
 
= fg =
holt einen Hintergrundprozess in den Vordergrund
* siehe '''[[Linux:Shell:Bash:Builtin:fg]]'''
 
= getopts =
siehe '''[[Linux:Shell:Bash:Builtin:getopts]]'''
 
= hash  =
siehe '''[[Linux:Shell:Bash:Builtin:hash]]'''
 
= help  =
Schreibt einen kurzen Hilfetext zu einem eingebauten Kommando aus.
 
= history  =
Das Kommando dient zur Anzeige oder Manipulation des Kommandozeilenspeichers.
* siehe '''[[Linux:Shell:Bash:Builtin:history]]'''
 
= kill  =
Das Kommando dient der Steuerung bereits laufender Prozesse, indem es an diese Signale versendet.
* siehe '''[[Linux:Shell:Bash:Builtin:kill]]'''
 
= let =
Für jedes Argument wird eine arithmetische Substitution versucht.
* siehe '''[[Linux:Shell:Bash:Builtin:let]]'''
 
= local  =
Definition lokaler Variablen
* siehe '''[[Linux:Shell:Bash:Builtin:local]]'''
 
= logout  =
* Beendet eine Login-Bash und meldet den Benutzer ab.
* In einer Nicht-Login-Bash hagelt es eine Fehlermeldung.
 
= popd  =
Entfernt den obersten Eintrag vom Verzeichnisstack und wechselt zum neuen obersten Verzeichniseintrag.
* siehe '''[[Linux:Shell:Bash:Builtin:popd]]'''
 
= printf =
siehe '''[[Linux:Shell:Bash:Builtin:printf]]'''
 
= pushd  =
Mit dem Kommando kann in ein angegebenes Verzeichnis gewechselt werden, wobei das Verzeichnis auf einem Stack abgelegt wird.
* siehe '''[[Linux:Shell:Bash:Builtin:pushd]]'''
 
= pwd  =
Gibt das aktuelle Arbeitsverzeichnis aus.
* siehe '''[[Linux:Shell:Bash:Builtin:pwd]]'''
 
= read =
siehe '''[[Linux:Shell:Bash:Builtin:read]]'''
 
= readonly  =
Variablen und Funktionen lassen sich nachträglich als »nicht änderbar« deklarieren.
* siehe '''[[Linux:Shell:Bash:Builtin:readonly]]'''
 
= return =
Rücksprung aus einer Funktion.
*siehe '''[[Linux:Shell:Bash:Builtin:return]]'''
 
= set =
'''[[Linux:Shell:Bash:Builtin:set | set dient zum Setzen bash-interner Variablen]]'''
 
= shift =
Verschieben der Positionsparameter
* siehe '''[[Linux:Shell:Bash:Builtin:shift]]'''
 
= shopt  =
Dient zum Setzen bash-interner Variablen, die das Verhalten der Shell maßgeblich beeinflussen
 
= suspend  =
Suspendiert die Shell. Sie kann nur durch ein Signal SIGCONT reaktiviert werden.
 
= test =
* '''test''' liefert in Abhängigkeit vom Wahrheitswert des Ausdrucks 0 (wahr) oder 1 (falsch) zurück und ist damit ein wichtiger Bestandteil vieler Shellskripten.
* siehe '''[[Linux:Shell:Bash:Builtin:test]]'''
 
= times  =
Misst die Zeit für die Shell und der von dieser gestarteten Kommandos.
* siehe '''[[Linux:Shell:Bash:Builtin:times]]'''
 
= trap  =
siehe '''[[Linux:Shell:Bash:Builtin:trap]]'''
 
= type =
siehe '''[[Linux:Shell:Bash:Builtin:type]]'''
 
= typeset  =
Siehe '''declare'''
 
= ulimit  =
siehe '''[[Linux:Shell:Bash:Builtin:ulimit]]'''
 
= umask  =
* Setzt die Rechtemaske für neu erzeugte Dateien oder Verzeichnisse bzw. zeigt die Rechte an.
* siehe '''[[Linux:Shell:Bash:Builtin:umask]]'''
 
= unalias  =
Löscht den angegebenen Alias bzw. mit der Option -a alle Aliasse.


= unset  =
</syntaxhighlight>
Dient zum Löschen einer Variable oder Funktion.
=== Optionen ===
=== Parameter ===
=== Umgebungsvariablen ===
=== Exit-Status ===
== Anwendung ==
=== Fehlerbehebung ===
== Konfiguration ==
=== Dateien ===
<noinclude>
== Anhang ==
=== Siehe auch ===
{{Special:PrefixIndex/{{BASEPAGENAME}}}}


= wait  =
==== Dokumentation ====
Dient zum Warten auf einen oder alle Hintergrundprozesse.
===== Man-Pages =====
* siehe '''[[Linux:Shell:Bash:Builtin:wait]]'''
===== Info-Pages =====
==== Links ====
===== Weblinks =====


[[Kategorie:Linux:Shell:Bash]]
[[Kategorie:Bash/Builtin]]
</noinclude>

Aktuelle Version vom 22. September 2024, 00:04 Uhr

Builtins - Kommandos, die von der Shell bereitgestellt werden

Beschreibung

Kommandos, die von der Shell bereitgestellt werden
  • Eingebaute Befehle (Builtins)
  • Kein eigener Prozess
  • Von der Shell interpretiert und ausgeführt
Intern/Extern

Manchmal gibt es eine eingebaute und eine externe Version

'echo' (intern) und '/bin/echo' (extern)

Gründe für eingebauten Befehlen

  1. Befehl nicht als Unix-Kommando verfügbar
    • Beispielsweise source
  2. Weil ein builtin Kommando effizienter arbeitet
    • als ein externes Kommando (keine Prozesserzeugung notwendig; Beispiel »echo«)
  3. Weil nur ein eingebautes Kommando Bash-interne Variablen ändern kann (Beispiel »export«)
  4. Weil ein Kommando wie »exec« nur innerhalb der Bash realisierbar ist

Arten von builtin

Was wird gestartet?

Builtins ein- und ausschalten

Übersicht

Befehl Beschreibung
Null
source
alias Definition einer Abkürzung für ein Kommando
jobs Listet die Jobnummern aller Hintergrundprozesse auf
bind
break
cd Verzeichnis wechseln
command
compgen
complete Verhalten der Bash bei der Vervollständigung steuern
continue
declare Deklarieren von Variablen
dirs Anzeige des Verzeichnisstacks
disown
echo Eine Zeile Text anzeigen
enable Eingebauten Kommandos der Shell aktivieren
eval Liest seine Argumente, wobei die üblichen Ersetzungen stattfinden, und führt die resultierende Zeichenkette als Kommando aus.
exec Das Kommando besitzt zwei Bedeutungen.
exit Beendet die Shell
export Exportieren von Variablen
fc Manipulation der History-Einträge
fg holt einen Hintergrundprozess in den Vordergrund
getopts
hash
help Schreibt einen kurzen Hilfetext zu einem eingebauten Kommando aus.
history Kommandozeilenspeicher anzeigen
kill Signale an Prozesse senden
let Für jedes Argument wird eine arithmetische Substitution versucht
local Definition lokaler Variablen
logout Beendet eine Login-Bash und meldet den Benutzer ab. In einer Nicht-Login-Bash wird eine Fehlermeldung ausgegeben.
popd Entfernt den obersten Eintrag vom Verzeichnisstack und wechselt zum neuen obersten Verzeichniseintrag.
printf
pushd Mit dem Kommando kann in ein angegebenes Verzeichnis gewechselt werden, wobei das Verzeichnis auf einem Stack abgelegt wird
pwd Gibt das aktuelle Arbeitsverzeichnis aus
read
readonly Variablen und Funktionen lassen sich nachträglich als »nicht änderbar« deklarieren.
return Rücksprung aus einer Funktion
set Setzen bash-interner Variablen
shift Verschieben der Positionsparameter
shopt Dient zum Setzen bash-interner Variablen, die das Verhalten der Shell maßgeblich beeinflussen
suspend Suspendiert die Shell. Sie kann nur durch ein Signal SIGCONT reaktiviert werden.
test Bedingungen prüfen
time Report time consumed by pipeline's execution
times Zeit der Shell und von ihr gestarteter Kommandos messen
trap
type
typeset declare
ulimit
umask Zugriffsrechte für neue Dateien steuern
unalias Löschen von Aliasen
unset Löschen einer Variable oder Funktion
wait Warten auf einen oder alle Hintergrundprozesse

Syntax

Optionen

Parameter

Umgebungsvariablen

Exit-Status

Anwendung

Fehlerbehebung

Konfiguration

Dateien

Anhang

Siehe auch

Dokumentation

Man-Pages
Info-Pages

Links

Weblinks