Beispiel:
# echo $PATH
/home/admin*:*/bin
Ich nehme an, dass es sich um eine Art Platzhalter handelt, aber ist es eine Ebene tief oder mehr?
Werden beispielsweise */bin
nur Elemente in übereinstimmen usr/bin
oder werden auch tiefer liegende Elemente in übereinstimmen usr/local/bin
and /home/admin/bin
? Und wird alles darunter /home/admin*
übereinstimmen , auch auf mehreren Ebenen?/home/administrator
Antwort1
Was bedeutet ein Sternchen (*) in einem Unix-$PATH?
# echo $PATH
/home/admin*:*/bin
Das bedeutet, dass Sie einen Invalidenstatus haben $PATH
.
$PATH
unterstützt keine Platzhalter.
Antwort2
Dasandere AntwortIhre Behauptung $PATH
ist ungültig, aber ich stimme nicht zu.
Das liegt daran, dass bash
es zumindest in keine Fehler verursacht – weder, wenn Sie es festlegen, noch wenn die Shell versucht, einen Befehl über $PATH aufzulösen.
In $PATH bedeutet ein Asterisk einwörtlich *
(Sternchen).
Das heißt, es gibtNEINEs wird eine Platzhaltererweiterung durchgeführt und tatsächlich wird das wörtliche Verzeichnis geprüft /home/admin*
, das nicht existiert und deshalb übersprungen wird. Außerdem wird geprüft */bin
, was ebenfalls ignoriert wird.
DudürfenErstellen Sie Verzeichnisse mit einem Literal *
darin (aber ... aber ...Warum?).
Und wenn das gemacht wird, dannWilleschau dort; z.B. im '*/bin'
Pfad
Das hier würde also tatsächlich mit Ihrem angegebenen $PATH-Wert funktionieren:
cd /
mkdir \*
mkdir \*/bin
echo 'echo Hello from \"star\"/bin' > \*/bin/asterisk.bash
chmod 744 \*/bin/asterisk.bash
asterisk.bash
(Wenn Sie es in einem lokalen Verzeichnis statt im Root-Verzeichnis ausprobieren möchten, geben Sie einfach nicht cd
in /
)
(Nichtdass ich empfehle, dies zu Hause zu tun. Mach es bei einem Freund zu Hause :-)
Aber da Sie es wahrscheinlich sowieso getan haben - nun, um die Lächerlichkeit loszuwerden, sollten die folgenden drei Befehle es tun.
(NB: Ich binnichtVerwenden Sie es rm -r
nur für den Fall, dass Sie einen Tippfehler haben oder die Shell, in der Sie sich befinden, die Dinge anders interpretiert.)
rm \*/bin/asterisk.sh
rmdir \*/bin
rmdir \*