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

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

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

Responder1

Eles são provavelmente 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 ./foo.shversão pode falhar, seja porque não tem permissão de execução para o usuário ou porque é interpretada por /bin/shem vez de /bin/bash( /bin/shé o interpretador de script padrão).

Responder2

Além da resposta de Toby, quero salientar que deve-se verificar os parâmetros shebang bash existentes 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 bash existentes no shebang.

Responder3

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

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

informação relacionada