【问题标题】:built in command to change prompt in custom linux/unix shell内置命令以更改自定义 linux/unix shell 中的提示
【发布时间】:2015-10-04 08:36:25
【问题描述】:

我查看了所有谷歌,发现如何更改 bash 配置文件,但我的项目需要一个内置命令来更改提示。

我在任何函数之外声明了char指针,我的命令修改了它,但是当函数返回(int继续一个do while循环)并且提示再次显示时,它是空白的。

我尝试过使用结构、联合,甚至是第二个字符指针,但遇到了同样的问题。

我认为使用可以在任何函数中访问和修改的全局字符指针将是我项目这一部分的解决方案。

我将不胜感激,并会尝试任何回应。

编辑: 贴在我的手机上,试图询问无代码,但在这里 代码:

char *prmpt;

...
int main(int argc, char **argv)
prmpt="$$ ";
do
{
printf("%s ", prmpt);

}while(1)

int cmd_prompt(char **args)
{
 prmpt = (char*)args[1];
 return 1;
}

【问题讨论】:

  • 如果外壳是“自定义”的,因为 you 实现了它,那么 you 就是将 anything 写入标准的人输出,它肯定也包括提示字符串。因此,you 编写您正在寻找的“内置”命令。你敢向我们展示你到目前为止写的东西吗?
  • 是的,但问题是我的命令应该更改提示字符串,即"prompt %%" 应该执行,然后下面的提示应该是 "%%" 并等待我的下一个命令,但它会执行并且我得到 "" 作为我的下一个提示
  • 没有代码,这不是一个可以回答的问题..
  • 一般来说,程序员都不是千里眼。为了看到一段代码的问题,他们通常需要查看那段代码。
  • Being "new" to C 你可能想看看 "string" 是如何在 C 中实现的,因为没有原生的 "string" 类型,但只有0-终止char-arrays。这可能与您目前所习惯的有所不同。

标签: c shell prompt


【解决方案1】:

基本上需要使用fgetsgetline 或更好,但他们可能会使用readlineeditline。这是一个使用getline的例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *prompt;
    size_t len = 256;
    size_t i = 0;

    if (!(prompt = malloc(256 * sizeof(char))))
        return 1;
    strcpy(prompt, "$");

    while ( 1 )
    {
        printf("[[%s]] ", prompt);
        i = getline(&prompt, &len, stdin);
        prompt[i-1] = '\0';

    }
}

或者如果您可以尝试使用getchar 自己实现getline(也许如果您的系统上没有getline,或者您只是想知道它是如何工作的)。如果您继续对编写 shell 感兴趣,最终将继续编写自己的 editline 库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2011-06-20
    • 2016-05-27
    相关资源
    最近更新 更多