Kann mir jemand erklären, was die Shell in den beiden folgenden Beispielen A) und B) tut? Es verhält sich offensichtlich anders, aber ich kann nicht herausfinden, warum die Ausgabe anders ist.
Beispiel:
Lassen Sie uns ein Skript in unserem aktuellen Verzeichnis bla.sh
mit nur einem Befehl benennen :
echo ${0##/*} hello
A)
Begonnen als: ./bla.sh
gibt:./bla.sh hello
B)
Begonnen als: . bla.sh
gibt:-bash hello
Da ich dies in einem Skript verwende, bricht die zweite Ausgabe (wegen des "-" vor der -bash) den Befehl ab. Natürlich hat ein einfaches --
vor dem ${...}
geholfen, aber ich würde gerne verstehen, was die Ausgabe überhaupt verursacht.
Ich liebe Bash. Und vi [m]. Aber ich schweife ab…
source
ein Bash-Alias für ist.
, nicht das Gegenteil undsource
in anderen Shells nicht funktioniert../<cmd>
Führt das<cmd>
Programm, das sich im aktuellen Verzeichnis befindet, in einem neuen (gegabelten) Prozess aus. Es muss ausführbar sein. Und auch lesbar fängt es damit an#!
.. <cmd>
veranlasst Ihre aktuelle Shell, das Shell-Skript auszuführen, das sich im aktuellen Shell-Prozess<cmd>
in Ihrem$PATH
oder im aktuellen Verzeichnis befindet . Es muss lesbar sein. Es ist ein Alias für den Shell-Befehl .source
quelle
. <cmd>
sucht nach dem Programm in$PATH
und wenn es nicht gefunden wird, dann sucht es im aktuellen Verzeichnis.. ./cmd
./cmd
Verwendet den expliziten Pfad (./
- current dir) zur ausführbaren Datei. Und es ist nicht notwendig, dass es mit beginnt#!
.. cmd
- (akasource
) - Bash Builtin-Befehl. Ein sichtbarer Unterschied bei der Ausführungsource
besteht darin, dass die Umgebungsvariable der aktuellen Shell festgelegt / geändert werden kann.quelle
source
ist ein Alias für nur Bash.
(was Standard ist)