Origem vs. Por que comportamento diferente?

10

Eu aprendi recentemente que

. ./.a.a e ./.a.a é o mesmo.

No entanto, tentar source source .a.a dá um erro. IMO, . sendo alias de Bash para source não devem se comportar de maneira diferente, então o que estou perdendo?

Bônus, por que . . OK enquanto source source não é?

    
por LIttle Ancient Forest Kami 14.09.2016 / 11:15

2 respostas

20

Você não pode simplesmente substituir . por source em todos os lugares; se

. ./.a.a

funciona, você pode substituir o primeiro . (pelo menos no Bash):

source ./.a.a

O segundo . representa o diretório atual, você não pode substituí-lo por source (especialmente não ./ com source como você fez).

source source

seria OK se você tivesse um arquivo chamado source no diretório atual, contendo algo significativo para o seu shell atual. Não consigo ver como . . seria OK ...

Além disso, . ./.a.a e ./.a.a não são iguais, a segunda forma executa .a.a em um shell separado. Veja Qual é a diferença entre o sourcing ('.' Ou 'source') e a execução de um arquivo no bash? para detalhes.

    
por 14.09.2016 / 11:19
5

source é uma palavra-chave do shell que deve ser usada assim: source file onde file contém comandos shell válidos. Estes comandos shell serão executados no shell atual, como se tivessem sido digitados na linha de comando. Agora, . file faz exatamente o mesmo.

Além de . sozinho significa "o diretório de trabalho atual" como em ./xyz (" xyz neste diretório") ou a/b/./c/./d (que é idêntico a a/b/c/d ).

Além disso, . em um nome de arquivo tem um significado apenas por convenção, como em .foobar , o que indica um arquivo "oculto" (não realmente ...) ou como foobar.pdf , que indica um formato de arquivo sufixo (aqui .pdf ).

Esses diferentes significados não podem ser trocados.

    
por 14.09.2016 / 12:24

Tags