Bitte sagen Sie mir, was ist der Unterschied in der Bash-Shell zwischen dem Starten eines Skripts mit ./script.sh
und . ./script.sh
?Unterschied zwischen dem Starten eines Skripts mit ./script.sh und. ./script.sh
Antwort
Wie klausbyskov sagt, erfordert die erste Form, dass die Datei ihr ausführbares Erlaubnisbit gesetzt hat.
Aber was noch wichtiger ist, das erste Formular führt das Skript in einem separaten Prozess (getrennt von, unabhängig von und nicht in der Lage, Änderungen in der Shell, die es gestartet hat) zu machen. Das zweite Formular bewirkt, dass die ursprüngliche Shell die Befehle direkt aus der Datei ausführt (als ob Sie sie in die Shell eingegeben hätten, oder als wären sie in dem Skript enthalten, das das 'Sourcing' ausführt).
Ein Skript, das FOO=bar; export FOO
enthält, wird keine exportierte Umgebungsvariable FOO
in der Shell erstellen, die die erste Variante ausführt, aber es wird eine solche Variable in einer Shell erstellen, die die zweite Variante ausführt.
Die zweite Form (‚Sourcing‘) ist ein wenig wie ein #include
in C.
Die erste erfordert, dass die Datei das + x Flag gesetzt hat. Die zweite nutzt die. Befehl aka "Quelle", beschrieben here.
- 1. Was ist der Unterschied zwischen einem Shell-Skript als ./script.sh und sh script.sh läuft
- 2. Wie diese beiden Befehle kombiniert werden ?: ./script.sh> logfile.log und ./script.sh 2> logfile.log
- 3. Wie ./script.sh in Windows Git-Shell ausführen?
- 4. Was ist der Unterschied zwischen $ @ und $ * im Shell-Skript? mein <code>script.sh</code>
- 5. "CMD ['/home/user/script.sh']" in Docker-Datei funktioniert nicht mit Docker-komponieren
- 6. Starten eines .py-Python-Skripts innerhalb eines CGI-Skripts
- 7. Unterschied zwischen dem Speichern eines Klassifikators mit Gurke und joblib.dump?
- 8. Starten eines Perl-Skripts ohne Ausgabe
- 9. Warum erbt ein untergeordneter Prozess eines Shell-Skripts (oder eines Prozesses) die Standardeingabe seines übergeordneten Elements?
- 10. Ausführen von PowerShell als anderer Benutzer und Starten eines Skripts
- 11. Unterschied zwischen dem Erstellen eines neuen Objekts und der Abhängigkeitsinjektion
- 12. Gibt es einen Unterschied zwischen der Ausführung eines Bash-Skripts und der manuellen Ausführung?
- 13. Schreiben eines Shell-Skripts - das den Fehler drucken kann und weiterhin die Eingabe beibehalten konnte, die Sie gerade in der Befehlszeile ausführen
- 14. Was ist der Unterschied zwischen dem Aufruf eines Skripts von einer Shell/einem Terminal und der Verwendung von Java-Prozessen?
- 15. Was ist der Unterschied zwischen dem Stack eines Threads und dem Stack eines Prozesses?
- 16. Unterschied zwischen width & height und dem Stilbildattribut
- 17. dplyr: Unterschied der Werte zwischen Ende Jahr und starten Jahr
- 18. Starten eines Python-Skripts über eine symbolische Verbindung
- 19. Ausführen eines Bash-Skripts von Golang
- 20. Ausführen eines lokalen Skripts auf einem fernen Linux-Host
- 21. Unterschied zwischen einer Datei kochend sh und Aufrufen einer Shell-Datei
- 22. Was ist der Unterschied zwischen dem Standard- und dem Standardkonstruktor?
- 23. Was ist der Unterschied zwischen dem WebConfigurationManager und dem ConfigurationManager?
- 24. Ausführen eines Windows-Batch-Skripts zum Starten mehrerer Dateien
- 25. Unterschied zwischen dem Hinzufügen List in Python mit + und + =
- 26. Shell-Befehl entspricht dem Drücken der Eingabetaste auf der Tastatur
- 27. Unterschied zwischen dem Datenabschnitt und dem BSS-Abschnitt in C
- 28. Was ist der Unterschied zwischen dem Betriebssystem und dem Kernel?
- 29. Unterschied zwischen 'return' und 'pur'
- 30. Unterschied zwischen dojo.mixin() und dojo.extend()?
Obwohl die wahr ist, desto wichtiger Unterschied besteht darin, dass „source“ liest und ausführt, um die Datei in der aktuellen Shell-Instanz. Das Ausführen des Skripts startet eine neue Instanz der Shell (wie in der Shebang-Zeile angegeben), in der das Skript ausgeführt wird. –
@Dan, ja, das ist richtig, und wird auch in dem Link, den ich gepostet habe erklärt. –
Das ist die '-x' * Erlaubnis * Flagge, nicht die Bash-x * Option * nur um klar zu sein. –