Salve devo fare un programma in c che simuli una shell linux. Il problema del mio programma è che i comandi senza argomenti (esempio: ls) li accetta mentre comandi  tipo "echo 3" mi da errore nella execvp e non capisco il perchè.
L'idea del mio programma è di prendere da tastiera una stringa suddividerla con strtok in parole inserirle in un array di stringhe e concatenare alla prima parola /bin/ così che una volta passata alla execvp la riconosca.
Questo è il mio codice:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
void esegui(char **c){
	int status;
	int pid=fork();
	if(pid==0){
		execvp(c[0],c);
		perror("execl");
		exit(EXIT_FAILURE);
	}else if(pid!=-1){
		if(waitpid(pid,&status,0) == -1){
			perror("waitpid: ");
			exit(EXIT_FAILURE);
		}else{
			return;
		}
	}else{
		perror("fork");
		return;
	}
}
char **inizializza(char *in){
	char **ret;
	ret=malloc(1*sizeof(char*));
	ret[0]=malloc(30*sizeof(char));
	strcpy(ret[0],"/bin/");
	char *p;
	int i=0;
	p=strtok(in," ");
	while(p){
		i++;
		printf("%s \n",p);
		if(i!=1){
			ret=realloc(ret,i);
			int len=strlen(p);
			len++;
			ret[i-1]=malloc(len*sizeof(char));
			strcpy(ret[i-1],p);
		}else{
			strcat(ret[0],p);
		}
		p=strtok(NULL," ");
	}
	return ret;
}
	
int main(){
	char in[1024];
	printf("cmd prompt>> ");
	scanf("%s",in);
	while(strcmp(in,"exit")!=0){
		char **pass=inizializza(in);
		esegui(pass);
		printf("cmd prompt>> ");
		scanf("%s",in);
	}
	return 0;
}
Attendo qualche soluzione grazie.