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.

566voto

source est une commande intégrée bash Shell qui exécute le contenu du fichier passé en argument, dans le Shell actuel. . Il a un synonyme dans . (période).

Syntaxe

. filename [arguments]

source filename [arguments]

13 votes

Est source une commande spécifique à bash ou d'autres shells l'ont-ils aussi ? (Je demande pour que les balises soient bien sur la question...)

2 votes

Afaik, source était présent dans le Shell de Bourne et donc probablement présent dans tous ses descendants. fr.wikipedia.org/wiki/Bourne_shell . Je sais que toutes les coquilles n'ont pas le source et moins sûrs des coquilles qui la contiennent.

16 votes

@nagul, source n'était pas présent dans le Shell de Bourne, c'est une extension GNU qui est arrivée bien plus tard. La syntaxe originale et toujours portable (POSIX) consiste à utiliser la commande "dot", c'est-à-dire . à la place. Personnellement, je n'utilise jamais source étant donné qu'il est plus long à taper et qu'il n'a aucune valeur ajoutée. Je suppose que son but principal est de rendre les scripts plus lisibles pour les débutants.

350voto

damphat Points 3583

Faites attention ! ./ y source son pas tout à fait la même chose .

  • ./script exécute le script comme un fichier exécutable, lançant un nouveau Shell pour l'exécuter
  • source script lit et exécute les commandes à partir du nom de fichier dans l'onglet courant Shell environnement

Nota: ./script n'est pas . script mais . script == source script

31 votes

Vous confondez ./command et . script. source-command est identique à .-command. Utiliser ./meh dit d'exécuter script/binaire nommé meh dans le répertoire courant, et n'a rien à voir avec source/. -command. Comme expliqué dans la réponse dans votre lien.

4 votes

@JoakimElofsson Il est mentionné dans le lien, mais je vais modifier la réponse pour éviter tout malentendu. Veuillez la corriger.

12 votes

C'est assez important que la réponse acceptée pointe aussi vers celle-ci, car pendant un moment j'ai pensé que ./ == source == .

107voto

micans Points 1169

Il est utile de connaître la commande 'type' :

> type source
source is a shell builtin

chaque fois que quelque chose est un Shell intégré, il est temps de le faire. man bash .

2 votes

Toujours apprendre quelque chose de nouveau en lisant man )

25 votes

Vous pouvez également utiliser help {builtin-name} c'est-à-dire help source .

3 votes

help ne fonctionne pas partout (du moins dans zsh). type fait.

45voto

Mak Points 173

. (une période) est un bash Shell. qui exécute les commandes d'un fichier passé en argument, dans le Shell courant. Source' est un synonyme de '.'.

De la page de manuel de Bash :

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

40voto

Mike Thien Points 338

Source" est la version longue de la commande ".". A l'invite de bash, on peut faire :

source ~/.bashrc

pour recharger vos paramètres (modifiés ?) de bash pour le bash en cours d'exécution.

La version courte serait :

. ~/.bashrc

La page de manuel :

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

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