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

¿Qué hace la "fuente"?

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

Existe, y es ejecutable. ¿Por qué no hay documentación al respecto en Ubuntu? ¿Qué hace? ¿Cómo puedo instalar la documentación sobre él?

Respuestas (9)

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

¡Ten cuidado! ./ y source no son no son exactamente lo mismo.

  • ./script ejecuta el script como un archivo ejecutable, lanzando un nuevo shell para ejecutarlo
  • source script lee y ejecuta comandos desde el nombre del archivo en el entorno corriente del shell

Nota: ./script no es . script, sino . 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 útil conocer el comando ‘type’:

> type source
source is a shell builtin

cuando algo es un shell builtin es hora de hacer man bash.

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

. (un punto) es un comando incorporado en el bash shell que ejecuta los comandos de un archivo pasado como argumento, en el shell actual. ‘source’ es un sinónimo de ‘.’.

De la página de Bash man:

. 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

“fuente” es la versión larga del comando “.”. En el bash prompt se puede hacer:

source ~/.bashrc

para recargar la configuración del bash (¿cambiado?) para el bash actual.

La versión corta sería:

. ~/.bashrc

La página del hombre:

. 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

El comando source ejecuta el script provisto (el permiso de ejecución es no obligatorio) en el entorno del shell corriente, mientras que ./ ejecuta el script provisto ejecutable en un shell nuevo. El comando

source tiene un sinónimo . filename.

Para hacerlo más claro, mira el siguiente script, que establece el alias.

make_alias

#! /bin/bash

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

Ahora tenemos dos opciones para ejecutar este script. Pero con sólo una opción, el alias deseado para el shell actual puede ser creado entre estas dos opciones.

Opción 1: ./make_alias

Hacer el script ejecutable primero.

chmod +x make_alias

Ejecutar

./make_alias

Verificar

alias

Salida

**nothing**

*Whoops! * Alias se ha ido con el nuevo shell.

Vamos con la segunda opción.

Opción 2: source make_alias

Ejecutar

source make_alias

o

. make_alias

Verificar

alias

Salida

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

Alias se ha fijado.

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

En caso de duda, lo mejor es usar el comando info :

[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

Escriba el comando “fuente de ayuda” en su shell.

Obtendrá la salida así:

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

Del Proyecto de Documentación de Linux, Guía de Scripts Avanzados de Bash, Capítulo 15 - Comandos y Construcciones Internas :

source , . (punto comando): Este comando, cuando es invocado desde la línea de comandos, ejecuta un script. Dentro de un script, un nombre de archivo fuente carga el nombre del archivo. La fuente de un archivo (punto-comando) importa el código en el script, agregándolo al mismo (el mismo efecto que la directiva #include en un programa C). El resultado neto es el mismo que si las líneas de código “de origen” estuvieran físicamente presentes en el cuerpo del guión. Esto es útil en situaciones en las que varios guiones utilizan un archivo de datos o una biblioteca de funciones comunes. Si el archivo de origen es en sí mismo un guión ejecutable, entonces se ejecutará, y luego devolverá el control al guión que lo llamó. Un script ejecutable de origen puede usar un retorno para este propósito.

Así que, para aquellos familiarizados con el lenguaje de programación C, el origen de un archivo tiene un efecto similar a la directiva #include.

Tenga en cuenta también que puede pasar argumentos posicionales al archivo de origen, como:

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

Con source puedes pasar variables o funciones de otro archivo a tu guión y usarlas sin tener que escribirlas de nuevo.

F.I:

#!/bin/bash

source /etc/environment

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

Cheers