#include <readline/readline.h>
#include <readline/history.h>
#include <wordexp.h>
// Variável para guardar um comando
char* cmd;
// Variável para guardar as palavras de um comando (nome do programa e argumentos)
wordexp_t words;
// Variável para guardar o valor de saída do comando
int status;
// Ler um comando
cmd = readline("prompt: ");
// Adicionar ao histórico
add_history(cmd);
// Dividir o comando em palavras
wordexp(cmd, &words, 0);
// Lançar um processo para correr o comando
if(fork())
{
// Aqui é o interpretador
wait(&status);
// Processar o resultado, etc...
}
else
{
// Aqui é o comando
execvp(words.we_wordv[0], words.we_wordv);
}
#include <stdio.h>
#include <wordexp.h>
#include <sys/types.h>
#include <unistd.h>
#include <malloc.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int *****;
int wp[2];
int i;
wordexp_t words;
*****= 0;
for (i = 1; i < argc - 1; i++)
{
pipe(wp);
if(!fork())
{
if(*****)
{
dup2(*****, 0);
close(*****);
}
dup2(wp[1], 1);
close(wp[1]);
close(wp[0]);
wordexp(argv[i], &words, 0);
execvp(words.we_wordv[0], words.we_wordv);
exit(EXIT_FAILURE);
}
close(*****);
***** = wp[0];
close(wp[1]);
}
dup2(*****, 0);
close(*****);
wordexp (argv[i], &words, 0);
execvp (words.we_wordv[0], words.we_wordv);
}