. arquivo para executar um arquivo no bash e arquivo para esvaziar o conteúdo do arquivo

-1

Por que usar . file no bash executa um arquivo mesmo que não seja um arquivo executável? É porque ele usa a sessão bash atual para executá-lo, então funciona como digitar bash file ?

Além disso, ao longo de linhas semelhantes. Eu sei que digitar > file exclui o conteúdo de um arquivo. Mas por que? Eu entendo isso envia a entrada padrão para um arquivo. Mas a entrada padrão não é o teclado? Então eu não deveria ir a uma nova linha na teoria e digitar coisas? Eu não entendo

    
por Yzhang 18.10.2015 / 14:15

2 respostas

5

Primeiro de tudo . file não executa o arquivo, ele o origina. Isso pode soar como um ponto pedante, mas há uma diferença importante. Quando você executa um arquivo, ele é executado em seu próprio subshell; quaisquer variáveis definidas nele, por exemplo, não serão propagadas para a sessão pai. Para ilustrar, considere este script ( foo.sh ) que simplesmente define uma variável e depois a imprime:

foo="bar"
echo "In the script, foo is $foo"

Agora, vamos definir a variável foo para algo, depois executar esse script e, quando terminar, echo $foo :

$ foo="baz" 
$ bash foo.sh 
In the script, foo is bar
$ echo $foo
baz

Como você pode ver, $foo foi definido dentro do script, mas isso não alterou o valor da variável no shell pai. Compare o que precede com o que acontecerá se nós fornecermos o script:

$ . foo.sh 
In the script, foo is bar
$ echo $foo
bar

Desta vez, como o script foi originado, a variável também foi alterada no shell pai.

O > file é mais simples. O operador > abre um arquivo (ou o cria, se ele não existir) para gravação e sobrescreve imediatamente qualquer coisa que já esteja no arquivo. Portanto, se você executar apenas > file com nada mais, o > esvaziará o arquivo, se existir.

    
por terdon 18.10.2015 / 18:47
2

Evite fazer duas perguntas não relacionadas no mesmo post.

1: não funciona exatamente como bash file porque o último executa um novo shell, enquanto . usa o mesmo shell atual. Funciona como source file .

2: A entrada padrão padrão é normalmente o teclado, mas com a execução de > file , não há comando para executar. O shell apenas processa os redirecionamentos e termina o processamento do comando (ausente). O que você descreveu teria sido cat > file .

    
por jlliagre 18.10.2015 / 14:23