Por que há ponto extra no início de algum comando que eu devo executar [duplicado]

5

Eu fiz o download de um pacote de instalação do servidor weblogic e, no README, há este comando para executar:

Linux/Mac
$ . ./configure.sh

Não é a primeira vez que vejo isso. Por que há um ponto extra no início do comando? Quando faço somente ./configure.sh , o resultado é o mesmo

    
por NeplatnyUdaj 04.11.2013 / 10:48

1 resposta

6

O ponto ( . ) é uma notação para executar comandos de um arquivo, que foi dado como um argumento para o ponto. O conteúdo deste arquivo, digamos ./configure.sh , é executado no shell atual. O comando dot originou-se com o shell Bourne e está disponível em outros, por exemplo, no Bash.

trecho da página man do 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 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 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.

OBSERVAÇÃO: Outros shells, como csh , possuem um comando similar source e muitas das variantes mais modernas suportam tanto a notação de ponto quanto o comando source . O Bash na verdade suporta ambos.

Exemplo

Veja um exemplo em que definiremos a variável $SOMEVAR em nosso shell atual, fornecendo um arquivo com essa variável definida.

Aqui está o arquivo de amostra:

$ cat test.sh 
SOMEVAR="hi"

Primeiro, verificamos se a variável $SOMEVAR ainda não está definida no shell atual.

$ echo $SOMEVAR

$

Agora, fornecemos e confirmamos que agora está definido:

$ . ./test.sh 
$ echo $SOMEVAR
hi

Portabilidade

Obrigado ao @ChrisDown por mencionar isso. O ponto ( . ) é especificado como parte do POSIX e, portanto, é portável, enquanto o comando source não é. Veja aqui na documentação sobre Especificações do Grupo Aberto sobre a Edição 7 , seção: "2. Linguagem de Comando Shell ". Especificamente esta seção.

trecho

NAME

dot - execute commands in the current environment

SYNOPSIS

. file

DESCRIPTION

The shell shall execute commands from the file in the current environment.

If file does not contain a , the shell shall use the search path specified by PATH to find the directory containing file. Unlike normal command search, however, the file searched for by the dot utility need not be executable. If no readable file is found, a non-interactive shell shall abort; an interactive shell shall write a diagnostic message to standard error, but this condition shall not be considered a syntax error.

    
por 04.11.2013 / 10:50

Tags