2016-04-26 54 views
0

我想在我創建的shell上添加自動完成。我不能把整個代碼,但我可以告訴你我的shell正在工作! 所以我試圖通過使用readline函數來實現自動完成,但結果並不是那麼好(請參閱我嘗試的註釋中的代碼):自動完成工作,但問題是: 1.我需要按兩次輸入現在執行該命令。 2.我需要鍵入兩次命令(如「ls」)才能執行它!你能幫我解決這個問題嗎?謝謝:)自動完成視覺不好(readline.h)

#include <readline/readline.h> 
#include <readline/history.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include "includes/ft_sh1.h" 

int main(int ac, char **av, char **envp) 
{ 
    char *line; 
    t_env *e = NULL; 
    char *add; 

    if (!(e = (t_env *)malloc(sizeof(t_env)))) 
     return (0); 
    e->envp = env_cpy(envp, 0, 0); 
    init_env(e); 
    while (1) 
    { 

--> My question is only about this part below <-- 

     ft_printf("shell$> "); 

    // add = readline("shell "); 
    // add_history(add); 
    // printf("%s", add); 

--> My question is only about this part above <-- 


     get_next_line(0, &line); 
     get_pwd_env(e); 
     e->cmd = get_cmd(e, line); 
     if (ft_strcmp(line, "exit") == 0) 
      exit(0); 
     else if (ft_strncmp(e->cmd[0], "cd", 2) == 0) 
      cd_cmd(e); 
     else 
      ft_execute(av, line, e); 
    } 
} 

回答

0

當你只是註釋掉的代碼有問題的一部分,你仍然有呼叫

 get_next_line(0, &line); 
在你的程序

,所以難怪你需要輸入兩個命令行。