Interpretador de comandos

1. Interpretador de comandos

Joao Manuel Cardoso Soares
jonhy_jotinfor

(usa Outra)

Enviado em 04/06/2017 - 15:20h

Boa tarde galera,
Preciso de fazer uma mini shell no Ubuntu mas sem utilizar o system().
Estou tendo bastantes dificuldades. Se alguém me puder ajudar agradecia.


  


2. Re: Interpretador de comandos

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/06/2017 - 21:51h

Você precisa saber exatamente o que deseja.
Se quem um shell tipo COMMAND.COM, cheio de comandos embutidos.
Ou algo que conste uma minilinguagem, como BASH, CSH, ZSH etc.

O que você já fez? O que você tem em mente?

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

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



3. Re: Interpretador de comandos

Paulo
paulo1205

(usa Ubuntu)

Enviado em 05/06/2017 - 01:04h

Um shell no UNIX tem as seguintes atribuições:

- reconhecer os comandos que lhe são passados, sabendo separar partes distintas (e.g. nomes de comandos, argumentos, modificadores, redirecionamentos etc.) e tratá-las adequadamente;

- dependendo do comando, criar subprocessos, redirecionar entrada e saídas e executar comandos externos nesses subprocessos (para tanto, é preciso conhecer o ciclo de vida de processos do UNIX);

- saber associar e dissociar o terminal de um determinado conjunto de processos relacionados, conhecendo o que é uma sessão, um líder de sessão, process groups, jobs e eventos produzidos pelo terminal ou por causa dele (coletivamente conhecidos como job control).


Referências que eu recomendo:

- manpage de termios do BSD, particularmente a seção Job Control in a Nutshell (por exemplo, como a de http://man.netbsd.org/).

- manpages de fork(), waitpid(), kill(), sigaction() e execve().

- livro Advanced Programming in the UNIX Environment, de Richard W. Stevens.


4. Re: Interpretador de comandos

Joao Manuel Cardoso Soares
jonhy_jotinfor

(usa Outra)

Enviado em 06/06/2017 - 10:38h

Bom dia,

Aquilo que tenho em mente é: usar um fork para criar um processo filho e dentro desse processo filho executar o comando. Este apenas lê o nome do ficheiro e uma palavra que o utilizador queira.


5. Re: Interpretador de comandos

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/06/2017 - 11:33h

Então é o vulgo "carregador".

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

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



6. Re: Interpretador de comandos

Joao Manuel Cardoso Soares
jonhy_jotinfor

(usa Outra)

Enviado em 06/06/2017 - 11:34h

listeiro_037 não percebi o que quiseste dizer



7. Re: Interpretador de comandos

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/06/2017 - 11:35h

É um programa que grosso modo carrega outro na memória.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

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



8. Re: Interpretador de comandos

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/06/2017 - 13:27h

Se você não vai cuidar de jobs, a tarefa fica mais simples. Você terá apenas de dividir o comando em partes diferentes, e depois executar a ação desejada dentro de um processo filho. Então vale a recomendação de estudar sobre o ciclo de vida do processo.


9. Re: Interpretador de comandos

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/06/2017 - 12:58h

Quando indiquei, acima, material para que você pesquisasse, fi-lo com referências às funções que você deveria usar. Entre elas, estavam fork(), que você usou, waitpid(), da qual você usou a variação wait(), e execve(), que é a função base empregada por execlp().


10. Re: Interpretador de comandos

Joao Manuel Cardoso Soares
jonhy_jotinfor

(usa Outra)

Enviado em 07/06/2017 - 13:05h

Eu li isso tudo mas eu não posso utilizar qq variação do exec


11. Re: Interpretador de comandos

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/06/2017 - 14:43h

Se você não puder usar execve(), então será impossível executar comandos externos, pois esse é o único meio pelo qual sistemas UNIX invocam outros programas.

Note que execve() não é uma variação de exec(): ela é a original, que é usada internamente por todas as outras versões de exec().






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts