【问题标题】:Assign value of C variable to bash variable [duplicate]将C变量的值分配给bash变量[重复]
【发布时间】:2019-08-19 13:07:46
【问题描述】:

我也在用 C 语言编写一个包含 bash 代码的程序。我需要将 C 变量的值分配给 bash 变量。更具体地说,我需要将提供给 C 程序的参数分配给同一程序内的 bash 变量。

int main( int argc, char **argv)
{
    printf(argv[1]);
    system("echo $1"); // Here I need to assign argv[1] to bash variable.
}

【问题讨论】:

  • 创建一个缓冲区,将值写入其中sprintf(buf, "echo %s",argv[1]) 并在缓冲区上使用system()
  • 什么“bash 变量”?您将如何将这些信息从 bash 传递到您的程序?通过命令行($ ./a.out 42 FOO),也许?
  • @Tommylee2k sprintf - 这就是您在应用程序中创建漏洞的方式。
  • @MaximEgorushkin 我认为这是他最小的问题;)

标签: c linux bash


【解决方案1】:

您可以使用setenv 来设置您的脚本可以访问的环境变量。

#include <stdlib.h>

int main(int argc, char **argv) {
    setenv("VAR", argv[1], 1);
    system("echo $VAR");
    return 0;
}

【讨论】:

  • 非常感谢,它解决了我的问题。
  • 在 bash 中对我不起作用:$ FOOVAR=3; echo $FOOVAR; echo -e '#include &lt;stdlib.h&gt;\nint main(void){setenv("FOOVAR", "42", 1);}' | gcc -std=c11 -pedantic -D_XOPEN_SOURCE=700 -x c -; ./a.out; echo $FOOVAR 输出“3 3”,而不是“3 42”。
  • @pmg,你用错了,因为你的shell脚本和c程序中的system()不在同一个会话中,可以简单地从c程序执行shell脚本,然后,环境变量将可用于代码中执行的脚本。
猜你喜欢
  • 2018-12-18
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多