Por que quando rodamos um arquivo executável precisamos adicionar ./ ahead? [duplicado]

1

Digamos que eu tenha um somecommands.sh e eu use chmod 777 para torná-lo executável. Por que tenho que digitar ./scommand.sh em vez de digitar apenas somecommand.sh para executá-lo em seu próprio diretório?

Isso faz algum sentido? Se for capaz de omitir, o que devo fazer?

Obrigado

    
por AGamePlayer 03.04.2015 / 05:16

2 respostas

2

Você deve fazer isso, porque o caminho atual ( pwd ) não está no caminho de pesquisa dos arquivos executáveis.

Digite isto no seu console:

echo $PATH | tr ':' '\n'

Cada pasta impressa está no caminho de busca dos arquivos executáveis (nessa ordem).

Agora, se você deseja executar um arquivo de um diretório diferente , é necessário fornecer o caminho completo (relativo ou absoluto).

./script.sh

significa o diretório atual ( ./ , relativo a onde você está) e o nome do arquivo ( script.sh ). Você pode igualmente usar o caminho completo (a partir da pasta raiz / ) para o seu arquivo (por exemplo, /home/guo/script.sh , se for o seu nome de usuário e quando o arquivo estiver em seu diretório pessoal).

Como uma dica, se você usa esse arquivo regularmente, sugiro criar um diretório local /bin ( ~/bin , como dentro de seu diretório pessoal) e, em seguida, colocar export PATH="$HOME/bin:$PATH" em seu .bashrc , por exemplo. E, em seguida, coloque seus scripts nesse diretório.

Outra coisa: sugiro não usar 777 como permissões para executá-lo. Em vez disso, sugiro 755 , portanto, somente você tem permissão para substituir o arquivo. Se você quiser tornar um arquivo executável use apenas chmod +x script.sh , ele geralmente fará o que você quer.

De maneira semelhante à descrita acima, é possível adicionar o diretório "atual", ao caminho: export PATH=".:$PATH" , mas isso não é aconselhável. Eu aconselho, usando um diretório privado ( ~/bin ) para esses casos de uso.

    
por 03.04.2015 / 06:28
1

Para executar qualquer executável no Linux, você precisa mencionar seu caminho completo (caso ele não esteja armazenado na variável $PATH ).

No Linux, . significa o diretório em que você está e / é o separador de caminho. Então, com ./somecommands.sh , você diz ao shell que, por favor, execute o executável somecommands.sh que está presente no diretório atual.

    
por 03.04.2015 / 05:58