Ao seguir o tutorial de depuração do eclipse do android, encontro os seguintes comandos.
cd /path/to/android/root
. build/envsetup.sh
lunch 1
make
emulator
Meu problema é o que o ponto anterior build/envsetup.sh
significa?
Um ponto nesse contexto significa "originar" o conteúdo desse arquivo no shell atual. Com source
si ser um comando shell builtin. E source
o operador de ponto sendo sinônimos.
Digamos que eu tenha o seguinte conteúdo em um sample.sh
arquivo.
$ cat sample.sh
echo "hi"
echo "bye?"
Agora, quando eu fonte:
$ . sample.sh
hi
bye?
$
Arquivos como esse costumam ser usados para incorporar comandos de instalação, como adicionar itens às variáveis de ambiente.
Digamos que eu tenha esses comandos em outro arquivo addvars.sh
,.
$ cat addvars.sh
export VAR1="some var1 string"
export VAR2="some var2 string"
Observe que eu não tenho nenhuma variável no ambiente do meu shell atual.
$ env | grep VAR
$
Agora, quando eu fonte este arquivo:
$ . addvars.sh
$
OK, parece que não fez nada, mas quando verificamos as env
variáveis novamente:
$ env | grep VAR
VAR1=some var1 string
VAR2=some var2 string
Para adicionar à resposta do slm:
Existem duas maneiras de executar um script de shell. Uma é executar o script em um processo separado, o que significa que qualquer coisa sobre o ambiente do shell (estado da memória) reverterá para o estado do shell "pai" antes de executar o processo do shell "filho".
Por exemplo, o diretório de trabalho atual (o local no sistema de arquivos em que se encontra) é determinado por processo. Então, vamos ter um script parecido com este:
#!/bin/bash
cd ~
cd ..
pwd
Então, vamos chamar esse script, oh foo
,. E vamos executar este script da seguinte maneira:./foo
Veremos o seguinte:
/home
(Exclusão de responsabilidade padrão de que há um grande número de distribuições de clones do Linux e do UNIX disponíveis no mercado, algumas das quais não colocam os diretórios do usuário /home
. Ou, como costumávamos dizer "Sua milhagem pode variar")
Agora, depois de executar este script, vamos digitar este comando
pwd
Para ver em que diretório estamos. Vamos ver algo assim:
/home/username
O motivo é que, novamente, o script de shell que executamos tinha seu próprio ambiente (incluindo seu próprio diretório onde os comandos estavam sendo executados), e esse ambiente desapareceu assim que o script terminou de ser executado.
Agora, vamos executar o foo
script assim
. ./foo
Ou equivalente:
source ./foo
Se fizermos um pwd
depois, veremos o seguinte:
/home
O motivo é que: fornecer um script não chama um processo separado. É como digitar todos os comandos no processo pai manualmente; seu ambiente é preservado após o término do script.
Deixe-me apresentar um exemplo mais simples. Vamos ter um script parecido com este:
#!/bin/bash
exit
Vamos nomear foo
. Vamos ter certeza de que pode executá-lo: chmod 755 foo
. Então, vamos rodar assim:
./foo
Nada acontece. No entanto, por outro lado, se fizermos isso:
. ./foo
Ou isto:
source ./foo
Nós terminamos a sessão.
O ponto (ponto) é uma mão curta para o bash incorporado
source
. Ele lerá e executará comandos de um arquivo no ambiente atual e retornará o status de saída do último comando executado. Os arquivos podem estar no diretório atual ou em qualquer lugar doPATH
. Não precisa ser executável.fonte
Como descobrir.
fonte
. (operador de origem ou ponto)
Leia e execute comandos a partir do argumento filename no contexto atual do shell.
source é sinônimo de ponto / período '.' no bash, mas não no POSIX sh, portanto, para obter a máxima compatibilidade, use o período.
Quando um script é executado usando a origem, ele é executado no shell existente, todas as variáveis criadas ou modificadas pelo script permanecerão disponíveis após a conclusão do script. Por outro lado, se o script for executado exatamente como o nome do arquivo, um subshell separado (com um conjunto de variáveis completamente separado) será gerado para executar o script.
Há uma diferença sutil entre executar um script executando .ss64script (ponto ss64script) e. ss64script (espaço em ponto ss64script)
a primeira está executando um arquivo que foi oculto no comando 'ls' (embora ls -a mostre arquivos ocultos) a segunda opção executa o ss64script, mesmo que não tenha sido definido como executável no chmod.
Fonte
fonte
TL; DR
O ponto é o mesmo que o comando de origem.
source é um comando Unix que avalia o arquivo após o comando, como uma lista de comandos, executada no contexto atual.
Extraído de https://en.wikipedia.org/wiki/Source_(command)
fonte