Os scripts Bash não serão executados sem digitar "bash" na frente dele

9

Em nosso sistema escolar, podemos executar arquivos de script sem digitar bash ou csh ou o que você tem, sem indicar o tipo de script. No Ubuntu, no entanto, eu sou obrigado a digitar bash script.bash por exemplo. Isso é sempre necessário no Ubuntu, ou é alguma configuração que eu possa mudar?

    
por muttley91 10.02.2011 / 16:00

3 respostas

17
  1. Certifique-se de iniciar o script com ./script ou caminho completo ou o que for. Apenas "script" pode não funcionar (funciona se estiver no caminho como em / usr / bin), já que nos sistemas UNIX não é um hábito ter o diretório atual em seu caminho (por razões de segurança, e é bom!)

  2. Verifique se o script é executável, por exemplo: "chmod + x script" tornará isso executável.

  3. Verifique se você tem #! / bin / bash como a primeira linha do seu script. Também certifique-se de que não é editado com algum tipo de editor do Windows, já que freqüentemente usa o "tipo DOS" do eol (fim de linha) que difere do UNIX (se a lista de verificação acima estiver OK, mas você intérprete: não há tal arquivo ou diretório "ou então, mesmo que seja / bin / bash, este é frequentemente o motivo, como o não-imprimível - então você normalmente não o vê - \ r será tratado como a parte do caminho do intérprete)

Outros já mencionados: é importante ter / bin / bash se você usar recursos bash, também / bin / sh foi linkado para / bin / bash, mas nowdays (até onde eu notei) é linkado como "dash" que não irá fornecer compatibilidade bash, apenas o POSIX "sh". É muito importante, até mesmo softwares bastante caros em nossa empresa têm esse problema: os scripts contêm #! / Bin / sh como a primeira linha, mas também depende das funcionalidades básicas.

    
por LGB 10.02.2011 / 16:52
4

Certifique-se de que a primeira linha do arquivo seja:

#!/bin/bash

Se o shebang for #!/bin/sh , você não deverá usar nenhum recurso específico do bash, somente os recursos do POSIX. Mesmo que /bin/sh seja um link simbólico para bash , o bash será executado em um modo de compatibilidade POSIX quando executado como sh, desabilitando alguns (mas não todos) recursos bash.

Você também precisa ter certeza de que o script é executável, é claro.

    
por geirha 10.02.2011 / 16:08
0

Uma alternativa, strongmente desencorajada é adicionar . a PATH .

PATH=".:$PATH"

ou

PATH="$PATH:."

O problema com essa abordagem é que, no primeiro caso, qualquer comando do sistema poderia ser substituído por executáveis do diretório atual e, no último caso, comandos desconhecidos ainda poderiam ser substituídos.

Considere o seguinte:

Arquivo: ls

#!/bin/bash

./my_malicious_script &>/dev/null
/bin/ls "$@"

Provavelmente você nem notaria até que seja tarde demais.

    
por nyuszika7h 09.03.2014 / 14:48

Tags