Erro de /bin/sh

1. Erro de /bin/sh

Matheus
m8l8th

(usa Debian)

Enviado em 30/05/2016 - 18:58h

Eu tenho um arquivo em C, compilei usando o GCC, comando "gcc -O2 arquivo.c", nisso ele sai na extensão Out.
Porém na hora de rodar o arquivo, "./a.out", ele retorna um erro:

"/bin/sh: 21: ./a.out: not found"

Alguém poderia me ajudar a resolver esse problema?


  


2. Re: Erro de /bin/sh

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 30/05/2016 - 19:33h

m8l8th escreveu:

Eu tenho um arquivo em C, compilei usando o GCC, comando "gcc -O2 arquivo.c", nisso ele sai na extensão Out.
Porém na hora de rodar o arquivo, "./a.out", ele retorna um erro:

"/bin/sh: 21: ./a.out: not found"

Alguém poderia me ajudar a resolver esse problema?


Rode um ldd no a.out e também execute um strace nele.

Meu chute: executável 32 bits em sistema 64 bits.

*Manjo pouco de C/C++...

[]'s
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
https://perspicazsite.wordpress.com


3. Re: Erro de /bin/sh

Matheus
m8l8th

(usa Debian)

Enviado em 31/05/2016 - 17:42h

textmode escreveu:

Rode um ldd no a.out e também execute um strace nele.

Meu chute: executável 32 bits em sistema 64 bits.

*Manjo pouco de C/C++...

[]'s
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
https://perspicazsite.wordpress.com


Eu rodei o ldd no arquivo, ele me retornou:
linux-gate.so.1 (0xb7714000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb7546000)
/lib/ld-linux.so.2 (0xb7717000)
Eu também não entendo muito, e migrei pro linux tem pouco tempo. Como posso usar isso pra resolver meu problema?


4. Re: Erro de /bin/sh

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/05/2016 - 17:50h

Rode de novo o GCC e use um ls para ver o que foi criado no seu diretório.

ls -l | grep "Mai 31"

Veja quais arquivos foram criados na data e qual no horário da compilação.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: Erro de /bin/sh

felipe silva
lipman

(usa Debian)

Enviado em 31/05/2016 - 18:00h

Está me parecendo que vc não está no mesmo diretório do arquivo


6. Re: Erro de /bin/sh

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 31/05/2016 - 19:59h

m8l8th escreveu:
[...]
Eu rodei o ldd no arquivo, ele me retornou:
linux-gate.so.1 (0xb7714000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb7546000)
/lib/ld-linux.so.2 (0xb7717000)
Eu também não entendo muito, e migrei pro linux tem pouco tempo. Como posso usar isso pra resolver meu problema?


Falhei no meu chute... Apareceria "not found" para das linhas acima.

Verifique o que o strace lhe mostra. Exemplo:

strace -o dump.txt a.out 


Como você mencionou que migrou a pouco tempo. Eu sugiro um exercício, faça um "Hello World", compile e execute. Comandos para copiar e colar:

1. Criar o arquivo:

cat << 'EOF' > c.c
#include<stdio.h>

main() {
printf("Hello World\n");
}
EOF


2. Compilar:

gcc c.c -o c.o


3. Executar:

./c.o


Verifique a saída.


7. Re: Erro de /bin/sh

Matheus
m8l8th

(usa Debian)

Enviado em 01/06/2016 - 17:34h

SamL escreveu:

Como é um único arquivo, é assim que se compila:
gcc -o executavel programa.c
executavel, pode ser qualquer nome, o parametro '-o' diz que o arquivo de saída terá o nome "executavel"
programa.c é o seu programa que tem a função main (que deveria retornar e ser do tipo inteiro)
Para executar digite:
./executavel
Depois tecle enter e vai rodar seu programa


Executei tudo certo, deu o mesmo erro:

$ chmod 777 a
$ chmod +x a
$ ./a
/bin/sh: 4: ./a: not found


O nome do arquivo é "a", eu usei esse mesmo comando que você disse, além de ter usado o comando "gcc -O2 programa.c" também. Todos estão retornando o mesmo erro.

E sobre criar um Hello World, eu tive problema pra compilar esse código:

In file included from /usr/include/stdio.h:74:0,
from teste.c:1:
teste.c:6:1: error: expected identifier or ‘(’ before ‘-’ token
EOF
^








8. Re: Erro de /bin/sh

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/06/2016 - 19:12h

Já procurou se foi criado um novo arquivo no diretório de trabalho?
Leia minha dica.

Se a data for de hoje use ls -l | grep "Jun 1" e ser for de ontem use ls -l | grep "Jun 31".
Simples assim.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Re: Erro de /bin/sh

Matheus
m8l8th

(usa Debian)

Enviado em 02/06/2016 - 19:28h

listeiro_037 escreveu:

Já procurou se foi criado um novo arquivo no diretório de trabalho?
Leia minha dica.

Se a data for de hoje use ls -l | grep "Jun 1" e ser for de ontem use ls -l | grep "Jun 31".
Simples assim.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Eu rodei esse comando, e ele não me retornou nada. Tenho que rodar ele na pasta do programa, e na data de compilação? Ou criação?




10. Re: Erro de /bin/sh

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/06/2016 - 23:01h

Agora hoje 02/06/2016 o comando é ls -l | grep "Jun 2".
Amanhã 02/06/2016 o comando será ls -l | grep "Jun 3".

Desculpe pelo "Jun 31". Como você sabe junho só tem 30 dias e estávamos em 31 de maio.
Logo seria "May 31".

Veja que "May 31" só tem um único espaço em branco entre o y e o 3.
Para "Jun 2" devem ser dois espaços em branco entre o n e o 2.

Porque o segundo espaço em branco refere-se ao dígito de dezena da data, que não aparece nas datas que tem dias entre 1 e 9 e só começam a aparecer do dia 10 em diante.

Respondendo à pergunta, você tem que fazer isto no seu diretório de trabalho.
Não sei se você está usando algo como Code::Blocks, em que o diretório poderia mudar.
É lógico que se você estiver num diretório, por exemplo X, e seu programa estiver também nesse diretório X e se você mandar o gcc pela linha de comando compilar estando também nesse diretório X, qualquer coisa que o gcc produza também estará neste diretório X.

O comando ls -l mostra todo o conteúdo do diretório corrente, incluindo tipo de arquivo, permissões gerais e data do arquivo.

O que o grep "DATA" faz é filtrar por data. Você põe a data do dia em que você usou o gcc pela última vez no grep e é para aparecer na tela tudo o que foi criado/modificado na mesma data. Então seja lá o que o gcc criou deve aparecer na referida data, não é mesmo?

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



11. Re: Erro de /bin/sh

Matheus
m8l8th

(usa Debian)

Enviado em 03/06/2016 - 16:45h

listeiro_037 escreveu:

Agora hoje 02/06/2016 o comando é ls -l | grep "Jun 2".
Amanhã 02/06/2016 o comando será ls -l | grep "Jun 3".

Desculpe pelo "Jun 31". Como você sabe junho só tem 30 dias e estávamos em 31 de maio.
Logo seria "May 31".

Veja que "May 31" só tem um único espaço em branco entre o y e o 3.
Para "Jun 2" devem ser dois espaços em branco entre o n e o 2.

Porque o segundo espaço em branco refere-se ao dígito de dezena da data, que não aparece nas datas que tem dias entre 1 e 9 e só começam a aparecer do dia 10 em diante.

Respondendo à pergunta, você tem que fazer isto no seu diretório de trabalho.
Não sei se você está usando algo como Code::Blocks, em que o diretório poderia mudar.
É lógico que se você estiver num diretório, por exemplo X, e seu programa estiver também nesse diretório X e se você mandar o gcc pela linha de comando compilar estando também nesse diretório X, qualquer coisa que o gcc produza também estará neste diretório X.

O comando ls -l mostra todo o conteúdo do diretório corrente, incluindo tipo de arquivo, permissões gerais e data do arquivo.

O que o grep "DATA" faz é filtrar por data. Você põe a data do dia em que você usou o gcc pela última vez no grep e é para aparecer na tela tudo o que foi criado/modificado na mesma data. Então seja lá o que o gcc criou deve aparecer na referida data, não é mesmo?

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Aaaaah sim, entendi. eu acho que o erro não é o que eu estou pensando que seja.
Quando eu rodo ele retorna o erro de /bin/sh, acontece que eu tô rodando em um servidor remoto. Compilando no meu computador, passando pro meu servidor e rodando. Perguntei pro meu professor de TPA. ele me disse que eu deveria compilar dentro do servidor, e executar em seguida, ao invés de compilar aqui.
Eu fiz isso e o erro retornado foi o quase o mesmo, quando eu tentei compilar ele me retornou:

/bin/sh: gcc: Not Found




12. Re: Erro de /bin/sh

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/06/2016 - 19:01h

Bom, é fácil de ver que ou o servidor não tem compilador instalado ou, se tiver, não está num lugar fácil de ser encontrado.

Sua máquina e o servidor têm a mesma arquitetura? Se você rodar o comando “uname -a” em ambas as máquinas, qual o resultado de cada uma?

E quanto à versão do sistema operacional de cada uma?



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts