Como executar um arquivo .sh no Red Hat?

2

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?

    
por Charly 28.05.2009 / 15:23

10 respostas

6

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.

    
por 28.05.2009 / 15:57
4

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.

    
por 28.05.2009 / 15:29
2

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
    
por 28.05.2009 / 15:27
0

É 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 ...

    
por 28.05.2009 / 15:26
0

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
    
por 28.05.2009 / 15:42
0

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.

    
por 28.05.2009 / 15:51
0

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.

    
por 29.05.2009 / 19:51
0

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.

    
por 29.05.2009 / 21:15
-1

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

    
por 28.05.2009 / 18:05
-4

você precisa alterar as permissões:

chmod +x test.sh
    
por 02.07.2016 / 16:10