Ich habe im Terminal von Red Hat Linux herumgespielt und als ich das Sternchen ( *
) gefolgt von der Rückgabe eingegeben habe , hat es eines der Programme in meinem Verzeichnis ausgeführt. Warum?
Ich gehe davon aus, dass Unix es als Platzhalter behandelt und das erste alphabetische Programm ausgeführt hat. Da der Platzhalter-Operator alle möglichen Dateien darstellt my_program.exe
und one_of_my_programs.program
ausgeführt werden kann, indem einfach der Name der Datei eingegeben wird. Da ein Programm zuerst alphabetisch ist, führt Unix es aus. Ist das ein richtiges Urteil?
linux
command-line
bash
unix
user6086585
quelle
quelle
*
alphabetisch, aber Bash ist eine, die dies tut.Antworten:
Ihre Interpretation ist richtig. Der Rest der Dateien wird als Parameterliste angezeigt.
Beachten Sie, dass dies nur möglich ist, wenn für das Programm das ausführbare Bit gesetzt ist und sich das aktuelle Verzeichnis in der
PATH
Liste befindet.Ein paar Hinweise, die zum Verständnis beitragen können:
./*
ist derPATH
Eintrag keine Voraussetzung.. *
oder. ./*
eingeben und die erste übereinstimmende Datei ein Skript ist, muss sie weder ausführbar sein noch muss sich das aktuelle Verzeichnis in befindenPATH
(gilt möglicherweise nicht für andere Shells alsbash
).quelle
PATH
mit demselben Namen wie die erste Datei vorhanden ist, wird dieser andere Befehl ausgeführt.mkdir foo; cd foo; touch rm xyz; ls; *; ls
.*
es sich um einen Alias handelt.. *
oder. ./*
kann manbash *
(oder jede andere Schale).Dies deutet darauf hin, dass dies
.
Teil IhrerPATH
Variablen ist. Das ist aus Sicherheitsgründen eine wirklich schlechte Idee (natürlich musste Windows einen nicht änderbaren Standardwert festlegen).Dieser "Vorschlag" ist jedoch nur in geringem Maße gültig: Wenn Sie eine Datei mit dem Namen
rm
in Ihrem aktuellen Verzeichnis haben,*
wird die Standardausführung in Ordnung seinrm
:Wie Sie sehen, war es nicht
rm
das aktuelle Verzeichnis (eine leere und nicht ausführbare Datei) ausgeführt, sondern die Standardeinstellung des Systems/bin/rm
.Überprüfen Sie immer Ihre Befehle, wenn Platzhalter beteiligt sind. Hier ist eine der furchterregendsten Botschaften, die es je zu lesen gab:
Dies ist das Ergebnis eines Anrufs
, mehr oder weniger die schlechteste Platzierung eines falschen Raums, die man sich vorstellen kann.
quelle
rm()
die entweder-i
die Parameter ergänzt oder die Parameter überprüft und nach Bestätigung fragt, ob mehr als eine bestimmte Anzahl vorhanden ist.mv /tmp/ohno /tmp/ohnoes
( google.fr/search?q=ohnoes&source=lnms&tbm=isch )