que shell é usado para executar um script [duplicado]

1

Eu tenho alguns pontos que eu quero entender: Eu tenho um script escrito na sintaxe bash e não contém a linha shebang (#! / Bin / bash) e meu shell padrão é tcsh.

  • ao conceder permissão de execução ao arquivo e executá-lo no shell padrão (tcsh) digitando o caminho completo do arquivo, ele é executado corretamente. Como o roteiro é executado corretamente no tcsh e sem digitar a linha shebang?
  • para o mesmo arquivo no shell padrão tcsh se eu usar o comando source para executar isso dá erro de sintaxe (mesmo se eu usasse a linha bash shebang) por quê?

Depois de algumas tentativas, eu encontrei o seguinte: Obrigado, isso parece correto, eu fiz algumas tentativas e cheguei ao seguinte: - Usando o comando source (o operador ponto é alias apenas no bash) para executar um arquivo:   - Executa mesmo que não tenha permissão de execução   - Executa usando o atual shell, independentemente da linha de shebang - Se a linha shebang existir e o arquivo for executado digitando seu nome (caminho total) (aqui precisa de permissão de execução), o arquivo é executado usando o shell na linha shebang. Se a linha shebang não existe e é executada pelo nome, o bash é sempre usado no meu caso, independentemente do shell atual. Eu não sei porque, é porque o bash vem em primeiro lugar no arquivo / bin ??????? você pode verificar isso comigo

    
por Ahmed Edris 20.02.2018 / 19:25

1 resposta

1

Se um script executável não tiver uma linha shebang, ele será executado por /bin/sh . Se você usar source para executá-lo, ele será executado no shell atual:

$ cat s.sh
echo "shell=$shell"
echo "BASH=$BASH"
$ ./s.sh
shell=
BASH=/usr/local/bin/bash
$ tcsh
[~]% ./s.sh
shell=
BASH=/bin/sh
[~]% source s.sh
shell=/bin/tcsh
BASH: Undefined variable.
    
por 20.02.2018 / 19:32

Tags