0

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

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

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

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

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

4

2 回答 2

2

环境变量不是将信息从进程传递给用户或调用进程的适当方式。您应该将此信息写入标准输出(将任何其他信息写入标准错误)并适当地重定向它。

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

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

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

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

于 2013-09-11T20:57:28.983 回答
1

您的程序不可能更改父进程的环境,这似乎是您正在尝试做的事情。

但是,您可以做的是让您的程序简单地打印所需的输出,然后使用eval.

$ ./cprog "wibble"
TEST=wibble
$ eval `./cprog "wibble"`
$ echo ""TEST\" is now equal to \"$TEST\""
"TEST" is now equal to "wibble"
$
于 2013-09-11T20:48:44.517 回答