
Ich habe im Terminal unter Red Hat Linux herumgespielt und als ich das Sternchen ( *
) gefolgt von der Eingabetaste eingegeben habe, wurde eines der Programme in meinem Verzeichnis ausgeführt. Warum?
Meine beste Vermutung ist, dass Unix es als Platzhalter behandelt hat und deshalb das erste alphabetische Programm ausgeführt hat. Da my_program.exe
und one_of_my_programs.program
durch einfaches Eintippen des Dateinamens ausgeführt werden können, stellt der Platzhalteroperator alle möglichen Dateien dar. Da ein Programm alphabetisch an erster Stelle steht, führt Unix es aus. Ist das eine korrekte Einschätzung?
Antwort1
Ihre Interpretation ist richtig. Die restlichen Dateien werden als Parameterliste angezeigt.
Beachten Sie, dass dies nur geschieht, wenn das ausführbare Bit des Programms gesetzt ist und das aktuelle Verzeichnis in der PATH
Liste enthalten ist.
Ein paar Hinweise, die zum Verständnis beitragen können:
- Wenn Sie tippen
./*
, ist diePATH
Eingabe nicht erforderlich. - Wenn Sie
. *
oder eingeben. ./*
und die erste übereinstimmende Datei ein Skript ist, muss es weder ausführbar sein, noch muss sich das aktuelle Verzeichnis in befindenPATH
(trifft möglicherweise nicht auf andere Shells als zubash
).
Antwort2
Dies deutet darauf hin, dass dies .
Teil Ihrer PATH
Variable ist. Aus Sicherheitsgründen ist das jedoch keine wirklich gute Idee (natürlich musste Windows dies zu einem nicht veränderbaren Standard machen).
Dieser "Vorschlag" ist jedoch nur bedingt gültig: Wenn Sie eine Datei mit dem Namen rm
in Ihrem aktuellen Verzeichnis haben, *
reicht die Ausführung desStandard rm
:
/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$
Wie Sie sehen, wurde nicht rm
das aktuelle Verzeichnis ausgeführt (eine leere und nicht ausführbare Datei), sondern die Standarddatei des Systems /bin/rm
.
Überprüfen Sie Ihre Befehle immer doppelt, wenn Platzhalter verwendet werden. Hier ist eine der erschreckendsten Nachrichten, die Sie je gelesen haben:
rm: cannot remove '.o': No such file or directory
Dies ist das Ergebnis des Aufrufs
rm * .o
, mehr oder weniger die schlechteste Platzierung eines unechten Raums, die man sich vorstellen kann.