Qual é a diferença entre ./script e. ./roteiro? [duplicado]

2

Eu estava tentando descobrir como exportar meu ambiental via script em vez de alterar meu arquivo .bashrc.

Eu encontrei este antigo e útil post que dizia:

Variables can only be exported to subordinate processes, you can't pass them back up to the parent. If you really want your script to affect the parent shell's environment, run the script as

. ./yourprogram

Eu só quero saber qual é a diferença entre . ./script e ./script ?

Quando eu olho para eles, eles significam para mim, executar o script do diretório atual?

    
por grebwerd 20.10.2012 / 00:49

3 respostas

4

./script executa um arquivo chamado 'script' no local ./ - que significa 'aqui' (isto é, o diretório atual). Esse script é executado em um sub-shell, e qualquer coisa que o script faz no ambiente é perdida quando o sub-shell termina.

. ./script diz ao shell atual para executar um arquivo chamado 'script' na localização ./ no shell atual sem um sub-shell, então qualquer coisa que muda no ambiente permanece quando o script pára.

. é uma abreviação do comando source . Você pode procurar fonte com man ( man source ).

/home/bob/script é o mesmo que ./script se você estiver no diretório /home/bob

. /home/bob/script é o mesmo que . ./script se você estiver no diretório /home/bob

    
por 20.10.2012 / 00:57
2

./script significa executar o arquivo script , que está no diretório atual. Geralmente, o shell ao executar um script chama primeiro fork() e exec() , ou seja, o script será executado no processo filho (ou seja, sub-shell)

. ./script é semelhante a source ./script , o que significa executar o script no shell atual sem qualquer fork()

    
por 20.10.2012 / 01:08
1

O primeiro é um comando shell . seguido por um caminho. O segundo é apenas um caminho.

O comando shell . "origina" o arquivo que segue para a sessão atual do shell. Portanto, as variáveis definidas em ./yourprogram ficarão visíveis na sessão ou no script que executou . ./yourprogram .

O segundo comando, por outro lado, apenas solicita que ./yourprogram seja executado. Isso só funcionará se ./yourprogram tiver as permissões de execução apropriadas e for

  1. um binário
  2. um script em algum idioma que começa com um "shebang" linha, por exemplo, #!/bin/sh ou #!/usr/bin/python
  3. ou é um script na linguagem do shell atual, falta uma linha shebang, mas o shell atual é padronizado para executar arquivos de script em uma criança shell em tais casos

Em nenhum desses eventos, as alterações nas variáveis de shell / ambiente realizadas por ./yourprogram serão visíveis posteriormente no script ou sessão de chamada.

    
por 20.10.2012 / 00:53