【发布时间】:2013-12-12 23:52:00
【问题描述】:
我正在尝试制作自己的简单命令行解释器 (shell),如果唯一的用户输入是空格,我希望提示符重复。本质上,如果用户按下返回,我希望提示重复并等待下一个输入。我正在使用 fgets 获取输入,并将其存储在 char *commandBuffer 中,以便通过 parse() 方法进行解析。我原本想检查 argv(argc = 0) 中是否有参数,但这只会导致光标移动到新行而不会再次打印提示。例如,如果我在提示符处输入“\n\n\ncd”,cd 仍然有效。我想尝试解决的另一个问题是,为了将在提示符下键入的任何内容发送到 shell,用户必须按两次 enter。到目前为止,这是我的代码:
for (;;) {
printf("p2: ");
fflush(stdout);
/*---------FGETS PROMPT----------*/
fgets(commandLine, STORAGE, stdin);
ln = strlen(commandLine)-1;
/* Removes trailing newline */
if(commandLine[ln] == '\n')
commandLine[ln] = '\0';
/* ATTEMPT to repeat the prompt if only user input at prompt is enter*/
if(commandLine[0] == '\0')
continue;
....More shell code....
【问题讨论】:
-
我之前也尝试过实现自己的控制台。你可能想试试
libreadlinecnswww.cns.cwru.edu/php/chet/readline/rltop.html,它会让你的生活变得更简单。 -
尝试在 if 块中检查
ln == 0而不是检查commandLine[0] == '\0' -
@ronmrdechai:这是一个非常小的优化,不会导致任何功能变化。