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

Wat doet 'bron'?

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

Het bestaat, en het is uitvoerbaar. Waarom is er geen documentatie over in Ubuntu? Wat doet het? Hoe kan ik er documentatie over installeren?

Antwoorden (9)

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

Wees voorzichtig! ./ en source zijn niet helemaal hetzelfde.

  • ./script voert het script uit als een uitvoerbaar bestand, en lanceert een nieuwe shell om het uit te voeren
  • source script leest en voert commando’s uit vanuit de bestandsnaam in de huidige shell omgeving

Opmerking: ./script is niet . script, maar . 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

Het is handig om het ‘type’ commando te kennen:

> type source
source is a shell builtin

wanneer iets een shell is gebouwd is het tijd om man bash te doen.

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

. (een periode) is een bash-shell ingebouwd commando dat de commando’s uitvoert vanuit een bestand dat als argument wordt doorgegeven, in de huidige commandoregel. Bron’ is een synoniem voor ‘.’.

Van Bash man pagina:

. 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

Bron’ is de lange versie van ‘.’ commando. Op de bash prompt kan men doen:

source ~/.bashrc

om uw (gewijzigde?) bash instelling te herladen voor de huidige lopende bash.

Korte versie zou zijn:

. ~/.bashrc

De man pagina:

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

source voert het opgegeven script uit (uitvoerbare toestemming is niet verplicht ) in de huidige shell-omgeving, terwijl ./ het opgegeven uitvoerbare script uitvoert in een nieuwe shell.

source commando hebben wel een synoniem . filename.

Om het duidelijker te maken, kijk eens naar het volgende script, dat de alias.

make_alias

#! /bin/bash

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

nu hebben we twee keuzes om dit script uit te voeren. Maar met alleen één optie, kan de gewenste alias voor de huidige shell worden aangemaakt tussen deze twee opties.

Optie 1: ./make_alias

Maak het script eerst uitvoerbaar.

chmod +x make_alias

Voer

./make_alias

uit ### Verifieer alias

Uitgang

**nothing**

*Winkels! * Alias is weg met de nieuwe schil.

Laten we gaan met de tweede optie.

Optie 2: source make_alias

Execute

source make_alias

or

. make_alias

Verifieer

alias

Output

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

Yeah Alias is ingesteld.

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

Bij twijfel kunt u het beste de opdracht info gebruiken:

[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

Typ het commando “hulpbron” in je commandoregel.

Je krijgt de uitvoer als volgt:

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

Van het Linux Documentatie Project, Advanced Bash Scripting Guide, Hoofdstuk 15 - Internals Commands and Builtins :

source , . (puntopdracht): Deze opdracht, wanneer deze wordt aangeroepen vanaf de opdrachtregel, voert een script uit. Binnen een script laadt een bronbestandsnaam de bestandsnaam. Sourcing van een bestand (dot-commando) importeert code in het script en voegt deze toe aan het script (hetzelfde effect als de #inclusief richtlijn in een C-programma). Het netto resultaat is hetzelfde als wanneer de “sourced” regels code fysiek aanwezig zouden zijn in de body van het script. Dit is nuttig in situaties waarin meerdere scripts gebruik maken van een gemeenschappelijk databestand of functiebibliotheek. Als het sourced bestand zelf een uitvoerbaar script is, dan zal het draaien, en dan de controle teruggeven aan het script dat het heeft aangeroepen. Een uitvoerbaar script kan hiervoor een return gebruiken.

Dus, voor degenen die bekend zijn met de programmeertaal C, heeft de sourcing van een bestand een soortgelijk effect als de #include richtlijn.

Merk ook op dat je positie-argumenten kunt doorgeven aan het bestand dat wordt gesourced, zoals:

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

Met source kun je variabelen of functies uit een ander bestand doorgeven aan je script en deze gebruiken zonder ze opnieuw te hoeven schrijven.

F.I:

#!/bin/bash

source /etc/environment

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

Cheers