Interpretador de script de shell do CentOS 7

2

Estou começando a escrever um script de shell para ser executado no CentOS 7. Qual interpretador deve ser chamado e como deve ser a linha shebang?

Eu tentei isso:

#!/bin/sh  

Mas quando digito cd /bin e, em seguida, ls -al , existem centenas de subdiretórios, nenhum dos quais é sh . Qual deles devo usar? O script executará alguns comandos do maven.

    
por CodeMed 20.04.2015 / 23:51

2 respostas

2

Na verdade, no CentOS 7, /bin/sh é um link simbólico para /bin/bash , que é o shell disponível por padrão na maioria das distribuições Linux.

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4  9 febr. 08:21 /bin/sh -> bash

(Se o comando acima retornar No such file or directory , então você está certo, você teria um problema. Você poderia então executar which sh para saber o caminho correto)

Portanto, no caso de você ter o mesmo resultado que eu, usar #!/bin/sh e #!/bin/bash será o mesmo.

Como alternativa, você pode usar este artigo: #!/usr/bin/env sh ou #!/usr/bin/env bash . Nesse caso, ele executará o primeiro sh ou bash disponível em seu PATH, independentemente do sh ser definido em /bin , /usr/bin ou em qualquer lugar. Embora possa ser conveniente para portabilidade, note que pode haver algum problema de segurança se você tiver vários executáveis nomeados sh em seu PATH.

    
por 21.04.2015 / 10:02
2

Você pode chamar o interpretador que quiser (bash, csh, zsh, sh, perl ou qualquer coisa).

#!/bin/sh é POSIXly-correto e deve ser executado.

Qual é a saída de ls /bin | grep s ?

Além disso, você pode querer verificar suas permissões de arquivo. Isso me matou quando escrevi meus primeiros scripts ( chmod +x ./myscript.sh ).

    
por 20.04.2015 / 23:58