uso de. em bash [duplicate]

3
#!/usr/bin/env bash

scriptdir="$HOME"
touch $scriptdir/foo.txt
. "$scriptdir/foo.txt" ||
{ echo "Missing '$scriptdir/foo.txt'. Exiting." ;
exit 1 ;}
echo "$scriptdir/foo.txt is present"
echo
rm "$scriptdir/foo.txt"
. "$scriptdir/foo.txt" ||
{ echo "Missing '$scriptdir/foo.txt'. Exiting." ;
exit 1 ;}

Eu não entendo o uso de . em . "$scriptdir/foo.txt" ||

Parece estar funcionando como if [ -f "$scriptdir/foo.txt ] , sim?

Tal que

scriptdir="$HOME"
touch $scriptdir/foo.txt
 if [ -f "$scriptdir/foo.txt" ] ; then
   echo
 else
 { echo "Missing '$scriptdir/foo.txt'. Exiting." ;
exit 1 ;}
 fi

produz um resultado similar.

Alguém pode elaborar sobre o uso de . aqui?

Se eu escrever um script em foo.txt, esse script provavelmente será executado porque . faz com que um arquivo seja executado, em vez de apenas verificar se ele está lá? E, contanto que $scriptdir/foo.txt esteja presente e seja executável, a metade direita de || nunca será executada porque a metade esquerda está retornando um status de saída zero?

    
por Bleakley 13.03.2017 / 05:55

1 resposta

6

. é um bash integrado, igual a source , o que faz é ler e executar comandos de FILENAME no shell atual. Digite help . ou help source no seu terminal para verificar a documentação completa.
Documentação completa:

.: . 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.
    
por 13.03.2017 / 06:15

Tags