Você pode chamar seu shell favorito com o script como um parâmetro.
bash ./script.sh
Corrija-me se estiver errado:
#!/bin/sh
/bin/sh
é Bash /bin/sh
não é bash, é o verdadeiro sh
Então, se eu quiser usar um script Linux no FreeBSD, e eu executar ./script.sh
no shell, ele executará o script Bash em "sh" e não em Bash, pois /bin/sh
no FreeBSD não é Bash. / p>
Existe uma maneira de executar esses scripts Bash sem modificá-lo? Portanto, nenhuma modificação na instrução #!/bin/sh
no arquivo de script para apontar para outro lugar?
Eu gostaria de rodar o script do Bash através do Zsh, se possível. Não quero instalar o Bash, e já que o Zsh pode executar scripts Bash ...
Eu corro o FreeBSD eu mesmo. Descobri que iniciar o script com o seguinte melhora bastante a compatibilidade entre sistemas operacionais:
#!/usr/bin/env bash
Você pediu para corrigir você quando estava errado. Vou tentar:
bash
, outros para dash
e esperamos que sejam muito potíveis para qualquer shell compatível com POSIX. bash
, é altamente recomendável ter um #!/bin/bash
shebang dash
ou mksh
no Debian, por exemplo. sh
. Qual deles é o verdadeiro"? No FreeBSD, sh
é baseado no shell Almquist como dash
ou NetBSD sh
. No OpenBSD, é baseado em pdksh
, em muitos Unices comerciais, é baseado em ksh88 (que é a base para a especificação Unix / POSIX sh
). Algumas conchas com base em ksh88
e bash
são as únicas duas que foram certificadas como sendo uma implementação sh
compatível com Unix (quando construídas com as bandeiras certas e quando estão no ambiente certo). Se você tiver scripts com /bin/sh
shebang e quiser que eles sejam executados por zsh
, você pode tentar passar o script para zsh
, mas isso falhará assim que esse script chamar outro script (e você não o faz) t deseja modificá-lo).
Por isso, vejo apenas a possibilidade de ter um link simbólico de /bin/sh
para seu zsh
. Mas eu não recomendo fazer isso , já que pode ter um impacto drástico no seu tempo de inicialização e não irá te ajudar em alguns de seus scripts linux.
Se você realmente quer rodar scripts escritos em Linux usando /bin/bash
no FreeBSD sem modificá-los, então você pode simplesmente copiar /usr/local/bin/bash
para /bin/bash
no FreeBSD e ele irá funcionar.