Qual é a diferença entre sh e ./ ao invocar um script de shell? [duplicado]

0

Eu vejo pessoas executando scripts de shell digitando ./scriptname . Agora esta parece ser a maneira padrão, já que eu tenho visto isso com muita frequência, mas ocasionalmente, mas não raro, eu os vejo digitar sh scriptname . É apenas uma questão de preferência ou existe uma diferença mais significativa entre ./ e sh ?

    
por sharkant 10.05.2017 / 13:51

1 resposta

8

Existem algumas diferenças.

./scriptname

requer que o arquivo chamado scriptname seja executável, e ele usa o shell especificado como sua primeira linha (no “shebang”, por exemplo #!/bin/sh ), se houver.

sh scriptname

funciona desde que o arquivo chamado scriptname seja legível e use sh (seja lá o que for), independentemente do que o shebang do script especificar. Com alguns shells, se scriptname não existir no diretório atual, os diretórios especificados em PATH serão pesquisados e o primeiro scriptname encontrado lá (se houver) será lido e interpretado.

Coloque de outra forma,

sh scriptname

funcionará sem configuração, mas você pode usar o shell errado e executar o script errado.

./scriptname

tentará executar o script correto usando o shell correto (ou, pelo menos, o shell especificado pelo autor do script, se houver), mas pode precisar de alguma configuração primeiro ( chmod a+x scriptname ).

    
por 10.05.2017 / 13:58