Unterschied zwischen Dateinamen und . Dateiname im macOS-Terminal

Ich bin MacOS-Neuling. (Ich verwende Mac OS High Sierra 10.13.6) Ich habe eine Software installiert. Sie sagten, um die Software zu initialisieren

. /Pfad/setsas.sh

Ich mache mir keine Gedanken darüber. und Platz, also rannte ich einfach

path/setsas.sh

Es schien zu laufen, aber danach konnte ich keinen Befehl der Software mehr ausführen. Ich stellte fest, dass ich den Befehl sozusagen hätte ausführen sollen, und danach war es in Ordnung. Also was diese. und Leerzeichen bedeuten hier, und raten Sie mal, warum ich zunächst keinen Befehl ausführen konnte, obwohl die Datei zu laufen schien? Ich weiß, dass . bedeutet manchmal den aktuellen Ordner, aber in diesem Fall sieht es nicht so aus.

Haben Sie versucht, auszuführen, . /path/setsasnachdem Sie Ihren Fehler erkannt haben?
Wenn Sie die Unix-Befehlszeile verwenden, sind Dinge wie Satzzeichen und Leerzeichen wichtig . Ändern Sie sie nicht, es sei denn, Sie verstehen sie.

Antworten (2)

. /path/setsas.shlädt die Variablen und Funktionen aus dem Skript in Ihre aktuelle Shell-Sitzung. Es ist dasselbe wie beim Laufen source /path/setsas.sh. Das Ausführen path/setsas.shauf der anderen Seite erzeugt einen neuen Prozess. Auf die Variablen und Funktionen kann von Ihrer aktuellen Shell aus nicht zugegriffen werden. Deshalb haben die Befehle bei dir nicht funktioniert.

Wenn Sie „einfach einen Befehl eingeben“, verwendet OS/X (wie jedes Unix/Linux) die $PATHUmgebungsvariable, um die Orte anzugeben, an denen gesucht werden soll, um ihn zu finden – es sei denn, es handelt sich um einen integrierten Bash/Shell-Befehl.

Wenn Sie angeben ./command, ist dies ein ausdrücklicher Verweis auf eine bestimmte Datei in einem bestimmten Verzeichnis – „der ‚aktuellen‘“. $PATHwird nicht verwendet, und der Befehl wird nicht als "eingebaut" betrachtet.

Ebenso ~/commandist ein expliziter Verweis, diesmal "~"als Abkürzung zu „meinem Home-Verzeichnis“. Noch einmal, $PATHwird nicht verwendet.

(Unrelated ...)Der sourceShell-Befehl erfordert einen bestimmten Verweis auf eine Datei und bewirkt, dass die Shell alle Befehle in dieser Datei liest und ausführt. (Wenn Sie beispielsweise Ihre „bash profile“-Datei ändern und sie ohne erneutes Anmelden einbinden möchten, ist dies eine Möglichkeit, dies zu tun.)

Beachten Sie das Leerzeichen nach dem. . In der Frage. Das Problem ist nicht pfadbezogen, sondern bezieht sich auf die Datei wie in der anderen Antwort.