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
- é executável e
- 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.sh
versão 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 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.sh
significam 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.