Na verdade, o problema é que o script que eu usei foi criado no dos, então eu converti meu script para unix usando o comando dos2unix. Obrigado a todos pela valiosa ajuda.
Quando tentei executar meu arquivo .sh
no Redhat usando ./test.sh
Estou recebendo um erro como
[test@tester unix_scripts]$ ./test.sh
: No such file or directory
[test@tester unix_scripts]$
Também defini a permissão do arquivo com chmod 777 test.sh
continua com o mesmo erro
Alguém pode me ajudar?
Na verdade, o problema é que o script que eu usei foi criado no dos, então eu converti meu script para unix usando o comando dos2unix. Obrigado a todos pela valiosa ajuda.
Você pode ter esquecido de colocar a primeira linha do seu script:
#!/bin/bash
por exemplo:
#!/bin/bash
echo Hello World
Se você tentar um script de shell simples como o exemplo do hello world acima? funciona ou não?
A propósito: você tem certeza sobre o contexto do SELinux?
O que: getenforce
diz?
O que: ls -l test.sh
diz?
Meu melhor conselho é tentar primeiro um script bem simples para que você possa verificar cada ambiente e comportamento de contexto.
Verifique se você está no diretório correto (você pode ver o que está no diretório digitando "ls") e o nome do arquivo é "test.sh". Você também pode tentar:
[test@tester unix_scripts]$ sh test.sh
É test.sh no diretório unix_scripts?
Existe um arquivo ou diretório que está sendo referenciado no test.sh que não existe? Porque o erro pode estar vindo do script, não da execução do script ...
Sim, deve ser #! (crash bang!):)
Você pode postar os resultados dos seguintes comandos, executados no diretório em que seu script está?
ls -l
cat test.sh
Você está usando o sh ou o bash ? (ou seja, qual é a primeira linha do seu roteiro?)
Se você está usando #! / bin / sh , então você precisa ter certeza de que / bin / sh existe (digite which sh )
Você pode precisar tentar #! / bin / bash ou outro shell se / bin / sh não estiver instalado.
Experimente getenforce
.
Se for retornado, o selinux estará ativado e seu script talvez precise estar em um contexto diferente para ser executado.
Se getenforce
retornar a imposição, verifique dmesg, / var / log / message /var/log/audit/audit.log ou aonde quer que o selinux efetue login no seu host para localizar o problema exato.
Ou tente codificar o script no mesmo contexto que outro script executado.
Para ver um contexto de arquivos, use ls -lZ
.
Ou tente
chcon --reference=/script/that/will/work /script/that/wont/work
Talvez verifique a página do manual do chcon, não tenho 100% de certeza sobre a sintaxe --reference.
Colocar um hashbang no seu script não altera o que é necessário para executá-lo. Você deve configurá-lo para ser executável (chmod + x test.sh) e depois executá-lo (./test.sh), ou pode chamá-lo como um argumento do shell (sh test.sh).
Você também pode colocar o script em qualquer local da sua variável $ PATH (por exemplo ~ / bin /, / usr / local / bin /) e, se for executável, você pode executá-lo de qualquer lugar sem referenciar sua localização .sh).
Se um script for executado sem ser um argumento do shell, ele será executado por padrão no shell que estiver usando atualmente. Esse é onde o hashbang se torna importante ... se você quiser ter certeza de que ele é executado como um script bash, mesmo se o usuário estiver usando tcsh ou ksh ou outra coisa, coloque #! / bin / bash como a primeira linha do script.
etapa 1 - verifique se há um shebang na primeira linha do arquivo
passo 2 - o shebang aponta para um binário real? (tente which [path after shebang]
)
passo 3 - se o passo 2 fizer check out, ./test.sh deve funcionar, senão
etapa 4 - tente /full/path/to/sh test.sh
o que você postou, charly, não faz sentido algum
você precisa alterar as permissões:
chmod +x test.sh