Estou em um Kali Linux 64 bits.
Criei um script python que leva 2 argumentos para iniciar. Não quero digitar sempre os mesmos caminhos ou pesquisar no histórico dos comandos que usei no terminal. Então decidi criar um script simples que chama o script Python com seus argumentos.
#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/
É exatamente o mesmo comando que eu usaria no terminal. No entanto, recebo uma mensagem de erro quando tento executar o arquivo de script.
bash: ./wtf.sh: /bin: bad interpreter: Permission denied
wtf.sh tem direitos executáveis.
O que está errado?
Resposta
Você tem um espaço em vez de uma barra aqui:
#! /bin bash
Deve ser:
#! /bin/bash
ou simplesmente
#!/bin/bash
(o primeiro espaço é opcional). O shebang (#!
) deve ser seguido pelo caminho para um executável , que pode ser seguido por um argumento , por exemplo,
#!/usr/bin/env sh
Neste caso /usr/bin/env
é o executável; consulte man env
para obter detalhes.
Apenas /bin
se refere a um diretório.
Comentários
Resposta
É importante notar que se o ponto de montagem no qual o seu script reside tem o atributo “noexec”, então você pode fazer tudo o que quiser e ainda não funcionará, mas invocar o interpretador com o script como um argumento irá (contanto que que, por sua vez, não tenta executar outro script em uma montagem noexec).
#!/bin/sh
(ao invés de#!/bin/bash
) a menos que você saiba que está usandobash
recursos.sh
quando sei que ' m não usando recursos bash).which bash
é útil. Isso retorna/bin/bash
. No topo do meu script Bash, adiciono#!/bin/bash
. Então, quando desejo executar o script Bash, insirobash foo.sh
. Portanto,which sh
é usado da mesma maneira.sh foo.sh
/bin/sh
é algo diferente de Bash e há Bashismos despercebidos no script). Veja aqui.