¿Qué significa esto? PS test.sh [duplicado]

0

Esta pregunta ya tiene una respuesta aquí:

Vi el comando como " . test.sh" en algún código fuente de shell, pero no sé qué hace. Entonces, he intentado esto. Y ese .sharchivo se ejecuta.

Sin embargo, no entiendo cómo funciona " .". ¿Puedes explicar?

sinapps
fuente

Respuestas:

4

El .comando (que tiene un sinónimo, sourcein bash, pero no en la mayoría de los demás derivados de shell Bourne) lee el archivo nombrado como parte del shell actual.

Considerar:

$ cat test.sh
export ENVVAR="Welcome"
echo $ENVVAR
$ echo $ENVVAR

$ test.sh
Welcome
$ echo $ENVVAR

$ . test.sh
Welcome
$ echo $ENVVAR
Welcome
$

NB: Truco 1: supongo que test.shes ejecutable. Truco 2: supongo que test.shestá en un directorio en $PATH.

Significa que las variables de entorno establecidas test.shafectan el shell actual. Por el contrario, ejecutar un comando sin el .no afecta el entorno del shell actual. El .mecanismo se utiliza cuando .profilese leen y los archivos relacionados, por ejemplo.

Tenga en cuenta que .busca nombres simples (como test.shsin una barra inclinada) en PATH, pero el archivo solo debe ser legible; No tiene que ser ejecutable.

Jonathan Leffler
fuente
Tenga en cuenta que cuando bashno está en modo POSIX, ./ sourcetambién verifica el directorio actual si no se encuentra ningún archivo usando PATH.
chepner
@chepner: Eso es completamente plausible. No me he molestado en experimentar si el directorio actual se busca primero o el último. En su mayor parte, no es importante para esta pregunta, que se trata de la diferencia de alto nivel entre el abastecimiento y la ejecución de un script. Sin embargo, estoy de acuerdo en que sí importa si vas a hacer un sistema a prueba de balas dependiendo de tal script.
Jonathan Leffler el
3

Es una abreviatura para esto, nada más:

source test.sh

http://ss64.com/bash/period.html

Matt Ball
fuente
3
El dotcomando es anterior al sourcecomando por años. Estaba en el shell Bourne original. El shell C tenía el sourcecomando para el mismo trabajo; bashimportó eso como sinónimo para .algún tiempo después.
Jonathan Leffler