714 votes

Que fait la "source" ?

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

Il existe, et il est exécutable. Pourquoi n'y a-t-il pas de documentation à son sujet dans Ubuntu ? Que fait-il ? Comment puis-je installer de la documentation à son sujet ?

9 votes

70 votes

Vous avez oublié $ type source source is a shell built-in

3 votes

Mon Shell a retourné ceci $ whatis source source (1) - bash built-in commands, see bash(1) . Aussi, man source m'emmène au BASH_BUILTINS(1) pages du manuel. Ceci est sur Fedora, je ne sais pas pourquoi les paquets debian ne sont pas (ou mal) documentés.

34voto

Harsh Vakharia Points 461

source La commande exécute le script fourni. (l'autorisation d'exécution est non obligatoire ) dans le actuel Shell environnement, alors que ./ exécute la commande fournie exécutable script dans une nouveau Shell.

source la commande a un synonyme . filename .

Pour rendre les choses plus claires, jetez un coup d'œil au script suivant, qui définit l'alias.

faire_alias

#! /bin/bash

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

Maintenant, nous avons deux choix pour exécuter ce script. Mais avec uniquement une option, l'alias souhaité pour le Shell actuel peut être créé parmi ces deux options.

Option 1 : ./make_alias

Rendre script exécutable en premier.

chmod +x make_alias

Exécuter

./make_alias

Vérifier

alias

Sortie

**nothing**

Oups ! L'alias a disparu avec le nouveau Shell.

Choisissons la deuxième option.

Option 2 : source make_alias

Exécuter

source make_alias

ou

. make_alias

Vérifier

alias

Sortie

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

Oui L'alias est défini.

10voto

Akshay Upadhyaya Points 111

En cas de doute, la meilleure chose à faire est d'utiliser la fonction info commandement :

[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.

6voto

Jasser Points 161

Tapez la commande "help source" dans votre Shell.

Vous obtiendrez un résultat comme celui-ci :

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.

5voto

Il convient de noter que, bien qu'il s'agisse d'une commande impressionnante, ni le source ni son abréviation de . serait source plus d'un fichier, ce qui signifie

source *.sh

ou

. script1.sh script2.sh

sera no travail.

Nous pouvons nous replier en utilisant for boucles, mais il émettrait l'exécutable plusieurs fois, créant ainsi plusieurs commandes ou émissions de celui-ci.

Conclusion : source ne prend pas de fichiers multiples en entrée. L'argument doit être unique.

Ce qui est nul, à mon avis.

2voto

DimiDak Points 193

Avec le source, vous pouvez passer des variables ou des fonctions d'un autre fichier dans votre script et les utiliser sans avoir à les réécrire.

F.I :

#!/bin/bash

source /etc/environment

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

Cheers

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X