我目前正在制作自己的历史复制品。 我意识到我需要HISTSIZE,HISTFILE和HISTFILESIZE变量来实现命令选项,但我不知道如何获取它们。是否存在类似于getenv的函数或类似于environ的变量,但是具有本地shell变量?
提前致谢!
答案 0 :(得分:1)
内置由shell直接执行,原因有两个:
shell只能通过两种方式提供对其内部变量的访问:
AFAIK,也没有常见的shell工具,但你可以将所需的shell变量导出到环境中:
export HIST
export HISTSIZE
export HISTFILESIZE
应足以让他们稍后通过getenv
答案 1 :(得分:0)
主声明可以有一个额外的参数char **envp
,它是一个由NULL指针终止的二维char数组。这是一个例子:
#include <stdio.h>
int main(int argc, char **argv, char **envp)
{
int index = 0;
while (envp[index])
printf("%s\n", envp[index++];
return 0;
}
的修改
使用envp将为您提供环境。为了找到shell变量,我找到了this。我认为这可以帮到你。
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("SET = %s\n",getenv("SET"));
return 0;
}
要测试程序,首先设置变量然后执行: -
导出SET = 1
答案 3 :(得分:0)
正如Steffan Hegny指出的那样,如果它们不是环境变量,就无法访问这些变量。所以popen()
,我认为可能有所帮助,不是解决问题的方法。
但是,如果您需要访问这些变量,可以将它们的值导出到可以通过getenv(char*)
访问的实际环境变量中。
E.g。
export _HISTFILE=$HISTFILE && ./myProgram
或
_HISTFILE=$HISTFILE ./myProgram
myProgram
访问此值:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("History file: %s", getenv("_HISTFILE"));
}