gpt4 book ai didi

c - 如何使用自定义 shell 回显 $0

转载 作者:行者123 更新时间:2023-11-30 18:51:08 25 4
gpt4 key购买 nike

我正在编写一个自定义 shell,并且 echo 使用我的 shell 变量:

'PATH' is set to /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin.
$ str=FOO
$ echo $str
19163: executing echo
FOO
19163: executed
$ str=BAR
$ echo $str
19170: executing echo
BAR
19170: executed
$

shell 变量的实现如下所示:

static bool expand_parameter(char *shellcommand, hashtable_t *hashtable) {
char mystring[CMD_LEN];
char *cp;
char *ep;
strcpy(mystring, shellcommand);
cp = strstr(mystring, "$");
int position = cp - mystring;
int quote = isBetweenQuotes(position, mystring);
if (cp) {
*cp = '\0';
strcpy(shellcommand, mystring);
ep = ++cp;
while (*ep && (*ep != ' ')) {
ep++;
}
if (!quote)
strcat(shellcommand, ht_get(hashtable, cp));
else {
strcat(shellcommand, "$");
strcat(shellcommand, cp);
strcpy(mystring, shellcommand);
return false;
}
}
strcpy(mystring, shellcommand);
return true;
}

我应该如何让 shell 打印 echo $0 来回显 shell 名称?我应该将其硬编码到我的 shell 变量函数中还是有最佳实践方法来做到这一点?

该代码的目的是启用 shell 变量。该项目是https://github.com/montao/openshell

最佳答案

Shell 参数,例如 $0 , $1 ...作为数组 char **argv 接收到您的 shell作为第二个参数传递给 main()功能。如果您不想过多修改代码,可以将这些变量复制为键 0 , 1 ...在调用您的 expand_parameter 之前先到哈希表功能,并且应该可以工作。但有一天你将不得不实现 shift就像命令一样,也许您必须以不同的方式管理它们。

关于c - 如何使用自定义 shell 回显 $0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37914165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com