2016-04-26 9 views
0

私が作成したシェルに自動補完を追加したいと思います。私はコード全体を入れることができませんでしたが、私のシェルが動作していることを伝えることができます! 私はreadline関数を使って自動補完を実装しようとしましたが、その結果はそれほど良くありませんでした(私が試した解説のコードを参照してください):自動補完は機能しますが、問題は次のとおりです: 1. 2回押す今すぐ実行されるコマンドを取得します。 2.コマンドを実行するには、 "ls"のようなコマンドを2回入力する必要があります。これを解決する手助けはできますか?ありがとう:)自動補完がうまくいかない(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

をあなただけの問題では、コードの一部のコメントを外したとき、あなたはまだ、あなたのプログラムの中で、あなたが2つのコマンド行を入力する必要があるので、何の不思議を呼び出し

 get_next_line(0, &line); 

を持っていません。

関連する問題