No Linux Terminal, existe uma diferença entre “bash foo.sh” e “./foo.sh”?

1

Esta pode ser uma pergunta boba para perguntar, mas como sou novo no Linux e estou tentando aprender o máximo que posso sobre isso, vou perguntar de qualquer maneira. Afinal, "Quanto mais você sabe!"

Ao executar um script bash no Linux Terminal, existe uma diferença entre " bash foo.sh " e " ./foo.sh "? Ou são apenas duas maneiras diferentes de realizar a mesma função?

Muito obrigado!

    
por Ev- 02.11.2015 / 20:23

3 respostas

1

Eles provavelmente serão equivalentes se ./foo.sh

  1. é executável e
  2. começa com #!/bin/bash (ou equivalente)

Caso contrário, e dada a pré-condição que você descreve ( foo.sh é um script bash), a versão ./foo.sh pode falhar, seja porque não tem permissão de execução para o usuário, ou porque é interpretada por /bin/sh em vez de /bin/bash ( /bin/sh é o interpretador de scripts padrão).

    
por 02.11.2015 / 21:16
0

Além da resposta de Tobys, quero ressaltar que é necessário verificar os parâmetros existentes do shebang bash no script (como #! / bin / bash -e) antes de chamar apenas 'bash foo.sh'. Chamar um script via 'bash foo.sh' não se importará com os parâmetros do bash existentes no shebang.

    
por 07.11.2015 / 18:27
0

As pessoas já explicaram aqui, mas em palavras simples bash foo.sh mean foo.sh será executado no shell bash.

É apenas uma maneira de dizer ao kernel para qual script de shell será usado para executar o script com quaisquer alterações no script.

    
por 07.11.2015 / 18:52