Executando um script de shell no * nix

1

Bit de um newb usando * nix (na verdade estou usando um shell bash no OS X 10.5) e me perguntei o que a resposta provavelmente muito simples é para isso ...

Quando escrevo um script (chamado, digamos, my_script) e o salvei no diretório atual, por que preciso colocar um período e uma barra na frente do nome para executá-lo? Assim:

./ my_script

O shell não pode dizer que eu quero executá-lo a partir do diretório atual? O Windows parece lidar com essa situação.

Felicidades Ben

    
por Ben 04.11.2009 / 20:07

4 respostas

6

O diretório atual não está automaticamente no caminho de execução. Isto é parcialmente histórico e parcialmente uma medida de segurança.

O Unix é projetado como um sistema multiusuário. Se seu diretório de trabalho estava atualmente em alguma pasta compartilhada entre muitos usuários do sistema, e seu diretório atual estava automaticamente no caminho de execução antes dos diretórios do sistema, então quando você executa standard_system_command você pode obter algo maligno um dos outros usuários nessa pasta compartilhada em vez do comando padrão do sistema.

O Windows não iniciou sua vida como um sistema multiusuário e, portanto, o prompt de comando tem diferentes comportamentos padrão.

Na minha opinião, você não deve incluir ./ no seu caminho. Se você criou um script que executa regularmente, deverá colocá-lo em uma pasta compartilhada, como / usr / local / bin, ou em uma pasta pessoal, como ~ / bin, que você adiciona ao PATH. Você também pode colocar um link simbólico em uma dessas pastas ou criar um alias.

    
por 04.11.2009 / 20:11
2

"O shell não pode dizer que eu quero executá-lo a partir do diretório atual? O Windows parece lidar com essa situação."

Se você adicionou. para a sua variável PATH, seria, mas isso é uma má ideia do ponto de vista da segurança. Considere que um cracker criou um arquivo chamado "ls" e um monte de arquivos grandes no diretório / tmp. Você está tentando descobrir por que o / tmp está cheio, então você digita cd / tmp; ls Agora, o ls está rodando com o seu nível de privilégio (possivelmente como root) e pode instalar qualquer exploit que quiser ... provavelmente sem o seu conhecimento, porque o cracker era inteligente o suficiente para canalizar tudo para > / dev / null e executar ls no termine com suas opções de linha de comando.

    
por 04.11.2009 / 21:16
1

O diretório atual não é adicionado ao seu caminho automaticamente por padrão. O diretório atual é representado por '.' (assim como um diretório é '..'). Você pode adicionar '.' para o seu caminho, mas não é recomendado.

Portanto, './my_script' diz, execute o script 'my_script' que está localizado no diretório atual.

    
por 04.11.2009 / 20:11
0

O ./ diz para procurar no diretório atual em vez de outro caminho primeiro. Você pode editar seu caminho em seu arquivo .profile para seu nome de usuário com as instruções aqui .

    
por 04.11.2009 / 20:11