带有环境变量的Shell脚本

时间:2013-09-11 20:23:10

标签: c bash shell environment-variables

我有一个C程序,最后有以下代码:

    memcpy(buff,"TEST=",4)
    putenv(buff)
    system("/bin/bash")

我在新shell中添加了一个新的环境变量。我想将测试回显到一个我可以轻松做的文本文件中。然后我想退出shell并再次运行它,所以运行它看起来如下

   ./cprog "some arg"
   echo $TEST > test.txt
   exit
   ./cprog "some arg"
   echo $TEST > test.txt
   exit

我必须继续退出,以便我可以更改TEST变量。我怎样才能在shell脚本中完成这项工作,这样我就可以继续循环并运行c程序,这样我就可以更改参数,但永远不会退出shell脚本本身。

2 个答案:

答案 0 :(得分:2)

环境变量不是将信息从进程传递给用户或调用进程的适当方式。您应该将此信息写入stdout(使用任何其他信息到stderr)并正确地重定向。

但是,如果您坚持使用此解决方案,则可以使用

for p in "one arg" "another arg" "more"
do 
    echo 'printf "%s\n" "$TEST" >> test.txt' | ./cprog "$p"
done

这将输入命令将变量写入程序的文件,然后退出shell(因为输入结束)。

最后,您将在文件$TEST中连接test.txt的所有值。

答案 1 :(得分:1)

您的程序无法更改父进程的环境,这正是您尝试执行的操作。

但是,您可以执行的操作是让程序只打印所需的输出,然后使用eval进行调用。

$ ./cprog "wibble"
TEST=wibble
$ eval `./cprog "wibble"`
$ echo ""TEST\" is now equal to \"$TEST\""
"TEST" is now equal to "wibble"
$
相关问题