Eu tenho dois arquivos de script de shell com exatamente as mesmas permissões, etc. Posso executar um deles apenas fornecendo seu nome na linha de comando, mas para o outro devo usar sh ou ./ para executá-lo. Qual é a razão?
Responder1
As probabilidades são de que os 2 scripts estejam em diretórios diferentes. Um dos diretórios está no PATH enquanto o outro não.
Você pode usar o type
comando para testar se um arquivo está presente no $PATH do seu shell atual.
$ type start_dropbox.bash
start_dropbox.bash is /home/saml/bin/start_dropbox.bash
Veja estas perguntas e respostas sobre U&L "Como faço para testar se existe um aplicativo em $PATH?" para uma cobertura mais completa.
Responder2
Se você está apenas dando o nome do script e ele funciona, então você o tem em /usr/bin/ /usr/sbin ou qualquer outra coisa. Tudo depende de como o seu caminho está definido.
Fazem isto:
1. echo $PATH
Se o seu script estiver em algum desses diretórios, ele será executado sem usar o caminho absoluto.
2. whereis "scripts name"
Whereis ou "qual" lhe dirá onde está localizado. Você pode até ter concedido direitos de execução a um arquivo e não ao outro. Para aquele que não roda apenas com o nome faça um chmod u+x
- Você pode precisar adicionar #!/usr/bin/env python se for um script python ou #!/usr/bin/env bash se for bash e assim por diante.