2009-09-24 10:35:48 +0000 2009-09-24 10:35:48 +0000
604
604

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]

Sie existiert, und sie ist ausführbar. Warum gibt es keine Dokumentation darüber in Ubuntu? Was macht es? Wie kann ich Dokumentation darüber installieren?

Antworten (9)

289
289
289
2013-07-11 13:24:07 +0000

Vorsicht: ./ und source sind nicht ganz dasselbe

  • ./script führt das Skript als ausführbare Datei aus und startet eine neue Shell, um es auszuführen
  • source script liest und führt Befehle aus Dateinamen in der aktuellen Shell-Umgebung aus

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

92
92
92
2013-01-09 15:45:47 +0000

Es ist nützlich, den ‘type’-Befehl zu kennen:

> type source
source is a shell builtin

wann immer etwas als Shell eingebaut ist, ist es Zeit, man bash zu tun.

40
40
40
2009-09-24 10:48:52 +0000

. (ein Punkt) ist ein in der Bash-Shell eingebauter Befehl , der die Befehle aus einer als Argument übergebenen Datei in der aktuellen Shell ausführt. ‘source’ ist ein Synonym für ‘.’.

Von der Bash-Manpage:

. 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.
32
32
32
2009-09-24 10:46:01 +0000

‘Quelle’ ist die lange Version des Befehls ‘. Auf der Bash-Eingabeaufforderung kann man:

source ~/.bashrc

tun, um Ihre (geänderte?) Bash-Einstellung für die aktuell laufende Bash neu zu laden.

Die kurze Version wäre:

. ~/.bashrc

Die Manpage:

. 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 shopt
    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.
28
28
28
2015-03-27 13:57:39 +0000

Der Befehl source führt das bereitgestellte Skript (die Ausführungsberechtigung ist nicht obligatorisch ) in der current Shell-Umgebung aus, während ./ das bereitgestellte ausführbare Skript in einer neuen Shell ausführt. Der Befehl

source hat ein Synonym . filename.

Um es klarer zu machen, werfen Sie einen Blick auf das folgende Skript, das den Alias setzt.

make_alias

#! /bin/bash

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

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

Option 1: ./make_alias

Skript zuerst ausführbar machen.

chmod +x make_alias

Ausführen

./make_alias

Verifizieren

alias

Ausgabe

*Whoops! * Alias ist mit der neuen Shell weg.

Nehmen wir die zweite Option.

Option 2: source make_alias

Ausführen

**nothing**

oder

source make_alias

Verifizieren

. make_alias

Ausgabe

Yeah Alias ist gesetzt.

10
10
10
2015-11-11 05:44:49 +0000

Im Zweifelsfall ist es am besten, den Befehl info zu verwenden:

[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
5
5
2015-09-19 14:14:57 +0000

Geben Sie den Befehl “help source” in Ihre Shell ein.

Sie erhalten eine Ausgabe wie diese:

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.
4
4
4
2017-06-12 00:13:34 +0000

Aus dem Linux Documentation Project, Advanced Bash Scripting Guide, Kapitel 15 - Internals Commands and Builtins :

source , . (Punktbefehl): Dieser Befehl führt ein Skript aus, wenn er von der Befehlszeile aus aufgerufen wird. Innerhalb eines Skripts lädt ein Quelldateiname den Dateinamen der Datei. Durch die Quelle einer Datei (Punkt-Befehl) wird Code in das Skript importiert, der an das Skript angehängt wird (gleiche Wirkung wie die #include-Anweisung in einem C-Programm). Das Nettoergebnis ist das gleiche, als ob die “beschafften” Codezeilen physisch im Hauptteil des Skripts vorhanden wären. Dies ist in Situationen nützlich, in denen mehrere Skripte eine gemeinsame Datendatei oder Funktionsbibliothek verwenden. Wenn die Quelldatei selbst ein ausführbares Skript ist, wird es ausgeführt und gibt dann die Kontrolle an das Skript zurück, das es aufgerufen hat. Für diejenigen, die mit der Programmiersprache C vertraut sind, hat das Ausführen einer Datei einen ähnlichen Effekt wie die Direktive #include.

Beachten Sie auch, dass Sie Positionsargumente an die auszuliefernde Datei übergeben können, wie:

$ source $filename $arg1 arg2
0
0
0
2018-11-28 08:58:53 +0000

Mit source können Sie Variablen oder Funktionen aus einer anderen Datei an Ihr Skript übergeben und diese verwenden, ohne sie erneut schreiben zu müssen.

F.I: &00002 “`

!/bin/bash

source /etc/environment

source /myscripts/jetty-common/config/jetty-functions.sh ”`

Prost