Welche Funktion hat das Sternchen als eigenständiger Befehl in Unix?

Welche Funktion hat das Sternchen als eigenständiger Befehl in Unix?

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.exeund one_of_my_programs.programdurch 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 PATHListe enthalten ist.

Ein paar Hinweise, die zum Verständnis beitragen können:

  • Wenn Sie tippen ./*, ist die PATHEingabe 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 befinden PATH(trifft möglicherweise nicht auf andere Shells als zu bash).

Antwort2

Dies deutet darauf hin, dass dies .Teil Ihrer PATHVariable 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 rmin 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 rmdas 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.

verwandte Informationen