Frage Was macht "Quelle"?


$ whatis source
source: nothing appropriate.
$ man source
No manual entry for source
$ source
bash: source: filename argument required
source: usage: source filename [arguments]

Es existiert und es ist lauffähig. Warum gibt es keine Dokumentation in Ubuntu? Was tut es? Wie kann ich Dokumentation darüber installieren?


486
2017-09-24 10:35


Ursprung


verbunden: superuser.com/questions/176783/ ... - lesmana
du hast vergessen $ type source  source is a shell built-in - bnjmn
Meine Shell hat das zurückgegeben $ whatis source  source (1) - bash built-in commands, see bash(1). Ebenfalls, man source bringt mich zum BASH_BUILTINS(1) Manpages. Dies ist auf Fedora übrigens, keine Ahnung, warum diese Debian-Pakete nicht (oder schlecht) dokumentiert sind. - arielnmz
@lesmana, toller Link. Das verknüpfte Antwort ist die gründliche Antwort auf diese Frage. - Scott
Versuchen Sie "Hilfequelle" - Jasser


Antworten:


source ist ein Bash Shell-Befehl, der den Inhalt der als Argument übergebenen Datei ausführt. in der aktuellen Shell. Es hat ein Synonym in . (Zeitraum).

Syntax

. filename [arguments]

source filename [arguments]

396
2017-09-24 10:47



Ist source einen Bash-spezifischen Befehl oder andere Shells haben es auch? (Ich frage, um Tags auf die Frage zu bekommen ...) - Jonik
So viel ich weiss, source war in der Bourne-Muschel gegenwärtig und daher wahrscheinlich in allen seinen Nachkommen vorhanden. en.wikipedia.org/wiki/Bourne_shell. Ich weiß, dass nicht alle Muscheln das haben source Befehl, weniger sicher, welche Shells es enthalten. - nagul
@ Nagul, source war nicht in der Bourne-Shell vorhanden, es ist eine GNU-Erweiterung, die viel später kam. Die ursprüngliche und immer noch portable Syntax (POSIX) verwendet den "dot" -Befehl, d.h. . stattdessen. Ich benutze nie persönlich source angesichts der Tatsache, dass es länger zu tippen ist und keinen Mehrwert hat. Ich denke, der Hauptzweck ist es, Skripte für Neulinge lesbarer zu machen. - jlliagre
@ Jlliagre meine persönliche "erklären, warum Quelle haben" ist das source ist nicht nur beschreibender, sondern sieht anders aus als ein Tippfehler. Ich habe Leute übersprungen die Periode / Punkt, wenn ich Tech-Befehle in E-Mail senden. - Rich Homolka
Eine häufige Verwendung für diesen Befehl ist für ein Shell-Skript source in einer "Konfigurationsdatei", die meist variable Zuordnungen enthält. Die Variablenzuweisungen steuern dann Dinge, die der Rest des Skripts tut. Natürlich wird ein gutes Skript Variablen auf vernünftige Standardwerte setzen, bevor die sourceoder zumindest nach gültigen Werten suchen. - LawrenceC


Achtung! ./ und source sind Nicht ganz das Gleiche.

  • ./script Führt das Skript als ausführbare Datei aus und startet ein neue Hülle um es auszuführen
  • source script liest und führt Befehle aus dem Dateinamen in der aktuelle Hülle Umgebung

Hinweis: ./script ist nicht . script, aber . script == source script

https://askubuntu.com/questions/182012/is-there-a-difference-between-and-source-in-bash-after-all?lq=1


226
2017-07-11 13:24



Sie vermischen ./command und. Skript. source-command ist dasselbe wie.-command. Die Verwendung von ./meh sagt Skript / Binär namens meh im aktuellen Verzeichnis und hat nichts mit Source / zu tun. -Befehl. Wie in der Antwort in Ihrem Link erklärt. - Joakim Elofsson
@ JoakimElofsson Es wird in dem Link erwähnt, aber ich werde die Antwort ändern, um Missverständnisse zu vermeiden. Bitte korrigiere es. - damphat
Beste Antwort. Vielen Dank! - JedatKinports
Es ist wichtig, dass die akzeptierte Antwort auch auf diesen verweist, denn das dachte ich mir für einen Moment ./ == source == . - Daniel F


Es ist nützlich, den Befehl 'type' zu kennen:

> type source
source is a shell builtin

Wann immer etwas eine Schale ist, ist es Zeit zu tun man bash.


81
2018-01-09 15:45



Immer etwas Neues beim Lesen wissen man )
Sie können auch verwenden help {builtin-name}, d.h. help source. - LawrenceC
help funktioniert nicht überall (zumindest in zsh). type tut. - kumar_harsh
Um zu verstärken: Wenn Sie bash verwenden, und wenn Sie wissen (vielleicht über 'type'), es ist ein eingebauter Befehl, dann 'Hilfe' bringt Sie direkt zu dem Absatz der Dokumentation, die Sie wollen, ohne durch 4.184 Zeilen ' Mann Bash 'Text. - Ron Burk


. (eine Periode) ist ein bash shell eingebauter Befehl Das führt die Befehle aus einer Datei aus, die als Argument in der aktuellen Shell übergeben wird. "Quelle" ist ein Synonym für ".".

Von Bash Man Seite:

. filename [arguments]
source filename [arguments]
       Read  and  execute  commands  from filename in the current shell
       environment and return the exit status of the last command  exe‐
       cuted from filename.  If filename does not contain a slash, file
       names in PATH are used to find the  directory  containing  file‐
       name.   The  file  searched  for in PATH need not be executable.
       When bash is  not  in  posix  mode,  the  current  directory  is
       searched  if no file is found in PATH.  If the sourcepath option
       to the shopt builtin command is turned  off,  the  PATH  is  not
       searched.   If any arguments are supplied, they become the posi‐
       tional parameters when  filename  is  executed.   Otherwise  the
       positional  parameters  are unchanged.  The return status is the
       status of the last command exited within the  script  (0  if  no
       commands  are  executed),  and false if filename is not found or
       cannot be read.

34
2017-09-24 10:48





'source' ist die lange Version von '.' Befehl. Auf der Bash Prompt kann man tun:

source ~/.bashrc

um deine (geänderte?) Bash-Einstellung für die aktuelle Running Bash neu zu laden.

Kurze Version wäre:

. ~/.bashrc

Die man-Seite:

. filename [arguments]
source filename [arguments]
    Read and execute commands from filename in the current shell environment and
    return the exit status of the last command executed from filename. If 
    filename does not contain a slash, file names in PATH are used to find the
    directory containing filename. The file searched for in PATH need not be
    executable. When bash is not in posix mode, the current directory is
    searched if no file is found in PATH. If the sourcepath option to the short
    builtin command is turned off, the PATH is not searched. If any arguments
    are supplied, they become the positional parameters when filename is
    executed. Otherwise the positional parameters are unchanged. The return 
    status is the status of the last command exited within the script (0 if no
    commands are executed), and false if filename is not found or cannot be
    read. 

20
2017-09-24 10:46



Dies sollte die akzeptierte Antwort sein. - Peter Mortensen


source Befehl führt das bereitgestellte Skript aus (ausführbare Erlaubnis ist nicht verpflichtend) in dem Strom Shell-Umgebung, während ./ führt das zur Verfügung gestellte aus ausführbar Skript in einem Neu Schale.

source Befehl habe ein Synonym . filename.

Um es klarer zu machen, sehen Sie sich das folgende Skript an, das den Alias ​​festlegt.

make_alias

#! /bin/bash

alias myproject='cd ~/Documents/Projects/2015/NewProject'

Jetzt haben wir zwei Möglichkeiten, dieses Skript auszuführen. Aber mit nur Eine Option, der gewünschte Alias ​​für die aktuelle Shell, kann zwischen diesen beiden Optionen erstellt werden.

Option 1: ./make_alias

Machen Sie Skript zuerst ausführbar.

chmod +x make_alias

Ausführen

./make_alias

Überprüfen

alias

Ausgabe

**nothing**

Hoppla! Alias ​​ist mit der neuen Shell weg.

Lass uns mit der zweiten Option gehen.

Option 2: source make_alias

Ausführen

source make_alias

oder

. make_alias

Überprüfen

alias

Ausgabe

alias myproject='cd ~/Documents/Projects/2015/NewProject'

Ja Alias ​​ist eingestellt.


17
2018-03-27 13:57





Im Zweifelsfall ist es das Beste, den info Befehl:

[root@abc ~]# info source

BASH BUILTIN COMMANDS
       Unless otherwise noted, each builtin command documented in this section
       as accepting options preceded by - accepts -- to signify the end of the
       options.   The  :, true, false, and test builtins do not accept options
       and do not treat -- specially.  The exit, logout, break, continue, let,
       and  shift builtins accept and process arguments beginning with - with-
       out requiring --.  Other builtins that accept  arguments  but  are  not
       specified  as accepting options interpret arguments beginning with - as
       invalid options and require -- to prevent this interpretation.
       : [arguments]
              No effect; the command does nothing beyond  expanding  arguments
              and  performing any specified redirections.  A zero exit code is
              returned.

        .  filename [arguments]
       source filename [arguments]
              Read and execute commands from filename  in  the  current  shell
              environment  and return the exit status of the last command exe-
              cuted from filename.  If filename does not contain a slash, file
              names  in  PATH  are used to find the directory containing file-
              name.  The file searched for in PATH  need  not  be  executable.
              When  bash  is  not  in  posix  mode,  the  current directory is
              searched if no file is found in PATH.  If the sourcepath  option
              to  the  shopt  builtin  command  is turned off, the PATH is not
              searched.  If any arguments are supplied, they become the  posi-
              tional  parameters  when  filename  is  executed.  Otherwise the
              positional parameters are unchanged.  The return status  is  the
              status  of  the  last  command exited within the script (0 if no
              commands are executed), and false if filename is  not  found  or
              cannot be read.

5
2017-11-11 05:44



Könnten Sie mehr als nur RTFM bereitstellen? - Peter Mortensen


Gib den Befehl "help source" in deine Shell ein.

Sie erhalten folgende Ausgabe:

source: source filename [arguments]

Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.

3
2017-09-19 14:14





Aus dem Linux-Dokumentationsprojekt, Advanced Bash Scripting Guide,
Kapitel 15 - Internal Commands und Builtins:

Quelle, . (Punktbefehl):
  Dieser Befehl führt, wenn er über die Befehlszeile aufgerufen wird, ein Skript aus. In einem Skript lädt ein Quelldateiname die Datei Dateiname. Durch das Beschaffen einer Datei (dot-command) wird Code in das Skript importiert und an das Skript angehängt (gleicher Effekt wie die # include-Direktive in einem C-Programm). Das Nettoergebnis ist das gleiche wie wenn die "Quell" -Zeilen des Codes physisch im Hauptteil des Skripts vorhanden wären. Dies ist in Situationen nützlich, in denen mehrere Skripts eine gemeinsame Datendatei oder Funktionsbibliothek verwenden.
Wenn die Quelldatei selbst ein ausführbares Skript ist, wird sie ausgeführt und gibt dann die Kontrolle an das Skript zurück, das sie aufgerufen hat. Ein ausführbares Quellskript kann zu diesem Zweck eine Rückgabe verwenden.

Für diejenigen, die mit der Programmiersprache C vertraut sind, hat das Sourcing einer Datei ähnliche Auswirkungen wie die #include Richtlinie.

Beachten Sie auch, dass Sie Positionsargumente an die zu übergebende Datei übergeben können, z.

$ source $filename $arg1 arg2

2
2018-06-12 00:13



Wie unterscheidet sich diese Antwort von den 9 vorherigen Antworten? - Stephen Rauch
Ich füge eine weitere Quelle von Informationen und zusätzlichen Informationen hinzu, die vorher nicht erwähnt wurden. - Alexandro de Oliveira


Es sollte angemerkt werden, dass, obwohl es ein tolles Kommando ist, auch nicht source noch seine Kurzschrift von . würde Quelle  mehr als eine Datei, Bedeutung

source *.sh

oder

. script1.sh script2.sh

werden nicht Arbeit.

Wir können zurückfallen mit for Schleifen, aber es würde die ausführbare Datei viele Male ausgeben, mehrere Befehle oder Ausgabe davon erstellen.

Fazit: source nimmt nicht mehrere Dateien als Eingabe. Das Argument muss eins sein.

Was saugt IMHO.


1
2018-05-31 11:23