Мне нужно реализовать несколько функций CLI, и теперь я пытаюсь использовать readline (), чтобы пользователь мог редактировать или выполнять свои команды.До сих пор он работал так, что позволяет пользователю вводить свои команды и просматривать историю.Это когда пользователь пытается редактировать команду.Курсору каким-то образом удается передать команду и перейти в приглашение, например «desktop r1234 | 5 $: ls», где «desktop r12345 (sp) $:» - это приглашение, показывающее рабочий каталог и корневой каталог;и "|"это курсор.Курсор должен останавливаться между '$' и 'ls', т. Е. "Desktop r12345 $: | ls". Метод showWrkngDir () просто отображает приглашение, как обычный терминал.
int main (int argc, char * argv[])
{
showWrkngDir();
static char *line_read = (char *)NULL;
using_history();
rl_readline_name = basename(argv[0]);
if (line_read)
{
free (line_read);
line_read = (char *)NULL;
}
while(strcmp((line_read = readline ("")) , "EXIT") != 0)
{
if (line_read && *line_read)
add_history (line_read);
tokenize(line_read);
showWrkngDir();
}
return 0;
}
void showWrkngDir()
{
char curDir[MAX_COMMAND_SZ];
char *env;
getcwd(curDir, sizeof(curDir));
env = (char *)getenv("USER");
printf("%s ",basename(curDir));
printf("%s(sp)$ ", env);
}