execv不适用于“execv(”/ bin / echo“,[”echo“,”$ PATH“])?

时间:2013-10-31 15:21:21

标签: c unix

我使用带有参数的execv调用echo:$ PATH,输出是$ PATH,而不是$ PATH环境变量的实际值,这是我在bash中执行相同操作时得到的。

为什么会这样?我正在通过所有正确的论点..

execv("/bin/echo", ["echo","$PATH"]);

感谢。

4 个答案:

答案 0 :(得分:1)

在将参数发送到cat之前,Bash将$ PATH更改为环境变量PATH的值。但是,execv()不会这样做,因此cat接收文字字符串$PATH作为参数。要获取PATH环境变量,请将“PATH”传递给getenv

答案 1 :(得分:1)

写作时

echo $PATH

在shell中,它是您的shell(bashcshksh,...)执行环境变量$PATH的扩展,{{1从来没有实际看到echo,但在命令行中已经获得了扩展值。 1

如果您想从C程序中获取环境变量的内容,则必须使用$PATH

getenv

  1. 实际上,通常shell不会调用const char *args[2]={"echo", getenv("PATH")}; execv("/bin/echo", args); ,而是调用内置/bin/echo指令,但这与此无关。

答案 2 :(得分:1)

bash解释并扩展$PATH之类的表达式,而不是操作系统。你将程序作为参数接收的字符串传递给execv,字面上没有引号,转义字符,shell扩展等等。

使用getenv查找环境变量的值,例如PATH

答案 3 :(得分:0)

在C中,字符串文字"$PATH"只是一个5个字符的字符串(6个包括终止'\0')。没有机制来扩展对环境变量的引用,就像在bash中一样。

如果要扩展环境变量的值,可以使用标准getenv()函数:getenv("PATH")

我不知道任何识别shell识别的$VAR语法的标准函数。