Por que preciso mudar para minha pasta bin privada para executar um script .sh?

2

Eu tenho uma pasta bin privada no meu diretório pessoal. É também no meu caminho. Se eu tentar executar um script de qualquer outro lugar no meu sistema, mas dentro dessa pasta, obtenho

  sh: 0: Can't open [name of script].sh

Se eu executar algo como sh ~/bin/killwine.sh , funciona

Eu gostaria de poder executar o script de qualquer lugar sem alterar minha localização.

O que estou fazendo de errado?

    
por Kendor 08.12.2014 / 17:35

3 respostas

4

Quando você digita sh somescript.sh , o sistema procura sh no caminho e não somescript.sh .

Então o sistema encontra sh e passa o argumento somescript.sh para ele. Então sh procura por somescript.sh na pasta atual ou na pasta especificada ~/bin/ se você digitou

sh ~/bin/somescirpt.sh. 

Para fazer o sistema procurar por somescript.sh no caminho, use-o diretamente como um comando, sem o prefixo sh. Em outras palavras, digite no terminal:

somescript.sh

Para que isso funcione, somescript.sh precisa estar localizado em uma pasta no caminho, neste caso ~/bin/ e ele precisa ser executável, como outros apontaram. Eu incluo o comando abaixo para completar.

chmod +x ~/bin/somescript.sh

Veja também Como faço para executar arquivos .sh? e

Como executar scripts sem digitando o caminho completo?

Espero que isso ajude

    
por user68186 08.12.2014 / 18:54
0

Como darent e user68186 explicaram que o script pode não ter o bit executável definido. Se o bit estiver definido, você poderá executar o script se estiver no diretório em que o script está, prefixando-o com ./ . Por exemplo:

  

./ myscript.sh

Você não precisa ter o .sh no final do nome do arquivo, mas é uma boa forma de anexar o .sh para que os outros saibam que é um script de shell.

    
por Charles McColm 08.12.2014 / 20:26
0

Como o comentário disse, seu script pode não estar marcado para execução. Quando você o chama, o que você está fazendo é dizer ao shell para ler seu conteúdo e executar as funções dentro do arquivo de texto, não é o mesmo que chamar um executável diretamente. Tente isto:

chmod +x ~/bin/killwine.sh

Em seguida, tente executá-lo novamente em outro diretório. Além disso, certifique-se de que a primeira linha do script contenha isso, portanto, o sistema sabe que deve ser executado por um shell:

#!/bin/sh
    
por animaletdesequia 08.12.2014 / 17:43