我使用带有参数的execv调用echo:$ PATH,输出是$ PATH,而不是$ PATH环境变量的实际值,这是我在bash中执行相同操作时得到的。
为什么会这样?我正在通过所有正确的论点..
execv("/bin/echo", ["echo","$PATH"]);
感谢。
答案 0 :(得分:1)
在将参数发送到cat
之前,Bash将$ PATH更改为环境变量PATH的值。但是,execv()
不会这样做,因此cat接收文字字符串$PATH
作为参数。要获取PATH环境变量,请将“PATH”传递给getenv。
答案 1 :(得分:1)
写作时
echo $PATH
在shell中,它是您的shell(bash
,csh
,ksh
,...)执行环境变量$PATH
的扩展,{{1从来没有实际看到echo
,但在命令行中已经获得了扩展值。 1
如果您想从C程序中获取环境变量的内容,则必须使用$PATH
:
getenv
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
语法的标准函数。