Set-Befehl ohne Argumente

Set-Befehl ohne Argumente

Ich wollte envalle Umgebungsvariablen anzeigen. Ich habe zufällig den Befehl eingegeben setund es scheint, als würde ein Skript per „cat“ an die Konsole gesendet. Warum passiert das?

DasReferenzseitescheint es nicht zu erklären.

 If no options or arguments are supplied, set displays the names
 and values of all shell variables

Antwort1

setist ein in die Shell integrierter Befehl. Wenn Sie ihn in der Befehlszeile eingeben, sehen Sie alles in Ihrer aktuellen Umgebung. Dazu gehören auch alle Funktionen, die Sie geladen haben. Beachten Sie, dass die meisten Distributionen zumindest einige hilfreiche Funktionen in den Shell-Profilen enthalten, und wenn Sie die Bash-Vervollständigung installiert haben, werden Sie Unmengen davon haben.

envist eine Binärdatei. Sie wird wie jeder andere Befehl von der Shell geladen und ausgeführt. Daher sieht sie nur die Umgebungsvariablen, die Sie exportiert haben, was alle Funktionen aus Ihrer Shell-Umgebung ausschließen sollte.

Antwort2

Wie Frank Schrijver in seinem Kommentar erklärt, setwird das eingebaute Bash-Programm alle Shell-Variablen (Variablen, die nur in dieser Laufzeitumgebung "existieren") und alleShell-Funktionen auch, wieder Funktionen, die in diesem bestimmten Shell-Prozess initialisiert und vorhanden sind.
So werden Sie beispielsweise Funktionen wie sehen

_tilde () 
{ 
   ...
}

Dies ist eine Funktion, deren Zweck darin besteht, die Tabulatorvervollständigung für das ~Zeichen für Ihren Bash-Zeileneditor bereitzustellen.
Tatsächlich ist sogar die Bash-Dokumentation für seteinsehbar, indem Sie den Befehl ausführen

man bash | less '+/^\s*set \[--'

erwähnt nicht die Tatsache, dass es standardmäßig alle Shell-Funktionen druckt, aber wie Sie festgestellt haben und andere darauf hingewiesen haben, druckt es auch Shell-Funktionen.

verwandte Informationen