Sobre a execução do script de shell

2

Suponha que eu tenha um arquivo de script de shell foo.sh .

Eu posso fazer chmod + x foo.sh e mude para um arquivo executável.

Em Kernighan-Pike: Unix Programming Environment (UP), eles mostram que após essa digitação foo deve executar o script. Em vez disso, no meu sistema Ubuntu, eu preciso digitar sh foo ou ./foo . Eu estou supondo que isso é devido a algum recurso do shell que não estava presente anteriormente (quando UP foi escrito). Eu apreciarei se alguns puderem me esclarecer por que essa diferença existe e por que é importante?

    
por DBS 07.04.2015 / 00:28

1 resposta

5
  1. O nome do executável é importante. Se o arquivo tiver o nome foo.sh , a execução de foo não funcionará, a menos que exista algum outro executável chamado foo . Ao contrário do Windows, o Unix não faz extensões de arquivos implícitas .

  2. Se o seguinte funciona:

    ./foo.sh
    

    Mas isso não acontece:

    foo.sh
    

    Isso significa que o arquivo está em seu diretório atual e seu diretório atual não está em seu PATH. Para sua proteção, se você não fornecer explicitamente o caminho para um comando, o shell procurará apenas o comando entre os arquivos que estão em seu PATH.

  3. Espaços são importantes. O seguinte pode funcionar:

    ./foo.sh
    

    Mas isso (tirado da primeira versão desta pergunta) certamente não funcionará:

    ./ foo.sh
    

    Com um espaço entre ./ e foo.sh , o shell pensará que você deseja executar o diretório atual com foo.sh como argumento. Isso gerará uma mensagem de erro.

por 07.04.2015 / 00:39