如何在C中获取本地shell变量?

时间:2016-12-01 09:14:35

标签: c linux bash shell unix

我目前正在制作自己的历史复制品。 我意识到我需要HISTSIZE,HISTFILE和HISTFILESIZE变量来实现命令选项,但我不知道如何获取它们。是否存在类似于getenv的函数或类似于environ的变量,但是具有本地shell变量?

提前致谢!

4 个答案:

答案 0 :(得分:1)

内置由shell直接执行,原因有两个:

  • 您避免产生新的流程(性能原因)
  • 这是访问内部shell变量(您的用例)的唯一方法

shell只能通过两种方式提供对其内部变量的访问:

  • 将它们复制到环境中,因为按定义环境是传递给子进程的变量列表
  • 要么提供一个进程间通信机制(命名管道,私有sockect等),以允许其孩子问他们

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"));
}