【问题标题】:In C, how to create and send shell variable?在 C 中,如何创建和发送 shell 变量?
【发布时间】:2018-11-10 17:27:47
【问题描述】:

我想得到以下结果,让我解释一下,我们有一个文件“test.sh”,我们在其中调用一个用 c 编写的命令(mycmd.c),并为其分配一个参数。我们希望它创建一个变量,其名称是传递的参数,然后在“test.sh”文件中返回结果。

例子:

在文件 test.sh 中,我们调用我们的命令,我们将要创建的变量的名称指定为参数,然后我们用回显显示提取的结果。

#!/bin/bash

./mycmd myvar

echo "OK : $myvar"

在 mycmd.c 文件中,我们创建一个名为 myvar 的 shell 变量(传递的参数),然后我们为这个变量赋值(myvar = foo),然后我们将它返回给脚本“test.sh” , 谁返回 "OK : foo"。

有可能吗?谢谢。

【问题讨论】:

  • 不,不是。想想如果一个进程可以修改其父环境会产生的安全问题。
  • 也就是说,该程序可能会在您的 .bashrc 或 .profile 中添加内容,或者,添加为将来的 shell 设置环境变量。

标签: c bash shell sh


【解决方案1】:

您的请求无法完成。您运行的每个程序,包括 shell 和子 shell,都有自己的环境。默认情况下,该环境的内容是其父进程的内容的副本,但它是独立的。一个进程只能修改自己的环境,不能修改任何其他进程的环境。

【讨论】:

    【解决方案2】:

    我本来建议你使用setenv,但经过一些思考和测试,实际上不可能用任意编译的程序来做你想做的事。进程环境受到保护,您的程序在运行时会获得一个新进程,从而获得一个新环境。

    最好的方法是让你的程序输出一些 shell 命令来运行。因此,如果您的程序如下

    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
          printf("export MYENV=helloworld");
          return 0;
    }
    

    而您将其调用为$(./myprogram)echo $MYENV 的结果将是helloworld。使用 Arch Linux 在 Bash 上测试。我知道这不是您想要的,并且可能不适合您的目的,但这是我所知道的最好的。

    【讨论】:

    • 感谢您的想法!
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 2011-08-13
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多