Kommandolokalisierung: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(7 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Wie wird ein Kommando lokalisiert=
 
=Wie wird ein Kommando lokalisiert=
Wenn die Shell alle Ersetzungen in der Kommandozeile vorgenommen und alle Umleitungen vorbereitet hat, ist der Zeitpunkt
+
* Die Shell versucht ein Kommando auszuführen.
gekommen, auf den der Anwender die ganze Zeit gewartet hat. Die Shell versucht das Kommando auszuführen. Dazu muss sie  
+
* Dazu muss sie es aber erst lokalisieren.
es aber erst lokalisieren. Das erste passende Kommando wird ausgeführt.
+
* Das erste passende Kommando wird ausgeführt.
 
+
* Als Kommandoname wird immer das erste Wort eines eines Befehls erkannt.
Als Kommandoname wird immer das erste Wort eines einfachen Kommandos erkannt. Ein Kommandoname kann mit Pfadnamen in
+
* Ein Kommandoname kann mit absoluten/relativen dem Pfad zum Programm angegeben werden.
einem Verzeichnis (absolut oder relativ) angegeben werden. Die Shell erkennt dies an (mindestens) einem Slash `/'  
+
* Die Shell erkennt dies an (mindestens) einem Slash `/' im Kommandonamen.
im Kommandonamen. Wenn kein Verzeichnis angegeben ist, versucht die Shell selbst, das Kommando zu finden. Dazu wird  
+
* Wenn kein Verzeichnis angegeben ist, versucht die Shell selbst, das Kommando zu finden.
der Kommandoname zuerst in der Hashtabelle gesucht, dann wird er mit den Synonymen, mit den Scriptfunktionen und
+
* Dazu wird der Kommandoname zuerst in der Hashtabelle gesucht,
schließlich mit den Shellfunktionen verglichen.  
+
* Dann wird er mit den Synonymen
 
+
* Weiter mit den Scriptfunktionen
Wird auf diese Weise kein Programm dieses Namens gefunden, werden alle in der PATH-Umgebungsvariablen aufgeführten  
+
* Schließlich mit den Shell-builtins verglichen.  
Verzeichnisse nach einer ausführbaren Datei dieses Namens durchsucht. Wird auch hier kein passendes Kommando gefunden,  
+
* Schliesslich wird in der PATH-Umgebungsvariablen aufgeführten Verzeichnisse nach einer ausführbaren Datei dieses Namens durchsucht.
gibt die Shell eine Fehlermeldung aus.
+
* Wird auch hier kein passendes Kommando gefunden, gibt die Shell eine Fehlermeldung aus.
  
 
=Reihenfolge der Lokalisierung=
 
=Reihenfolge der Lokalisierung=
*Hashtabelle
+
*[[Hashtabelle]]
*Aliase
+
*[[Aliase]]
*Funktionen
+
*[[Bash funktion]]
*Shell Funktionen
+
*[[Eingebaute Bash Funktion]]
*Pfad
+
*[[Linux-Dateisystem#Pfadnamen|Pfad]]
  
 
===which und type===
 
===which und type===
Zeile 33: Zeile 33:
  
 
Beispiel
 
Beispiel
root@zero:~# which startx
+
*which startx
 
  /usr/bin/startx
 
  /usr/bin/startx
  
Zeile 43: Zeile 43:
  
 
Beispiel
 
Beispiel
root@zero:~# type ls
+
*type ls
 
  ls is aliased to `ls --color=auto'
 
  ls is aliased to `ls --color=auto'
  

Aktuelle Version vom 31. Oktober 2023, 08:56 Uhr

Wie wird ein Kommando lokalisiert

  • Die Shell versucht ein Kommando auszuführen.
  • Dazu muss sie es aber erst lokalisieren.
  • Das erste passende Kommando wird ausgeführt.
  • Als Kommandoname wird immer das erste Wort eines eines Befehls erkannt.
  • Ein Kommandoname kann mit absoluten/relativen dem Pfad zum Programm angegeben werden.
  • Die Shell erkennt dies an (mindestens) einem Slash `/' im Kommandonamen.
  • Wenn kein Verzeichnis angegeben ist, versucht die Shell selbst, das Kommando zu finden.
  • Dazu wird der Kommandoname zuerst in der Hashtabelle gesucht,
  • Dann wird er mit den Synonymen
  • Weiter mit den Scriptfunktionen
  • Schließlich mit den Shell-builtins verglichen.
  • Schliesslich wird in der PATH-Umgebungsvariablen aufgeführten Verzeichnisse nach einer ausführbaren Datei dieses Namens durchsucht.
  • Wird auch hier kein passendes Kommando gefunden, gibt die Shell eine Fehlermeldung aus.

Reihenfolge der Lokalisierung

which und type

which

which gibt die vollen Pfadnamen der Dateien aus, die bei Benutzung des angegebenen Befehls ausgeführt werden würden.

which [-a] Dateiname 

Optionen:

  • -a : Alle Treffer ausgeben, nicht nur den ersten
  • --skip-dot : Verzeichnisse, die mit einem Punkt beginnen, auslassen

Beispiel

  • which startx
/usr/bin/startx

type

Anzeigen der absoluten Pfadnamen von Befehlen, und ob sich diese Befehle in der Hash-Tabelle der aktuellen Shell befinden.

type [Optionen] Befehle

Beispiel

  • type ls
ls is aliased to `ls --color=auto'

Optionen:

  • -a : Alle vorkommenden Befehle werden ausgegeben, nicht nur das, welches aufgerufen werden würde
root@zero:~# type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
  • -p : Anzeigen des Eintrags von Befehl in der Hash-Tabelle. Dieser Wert kann sich vom ersten Auftreten des Befehls in PATH

unterscheiden

root@zero:~# type -p apache2
/usr/sbin/apache2
  • -t : Anzeigen, ob Befehl ein Aliasname, ein Schlüsselwort, eine Funktion, ein eingebauter Befehl oder eine Datei ist
root@zero:~# type -t apache2
file