是否可以在 linux C 程序(无 root 权限)中重新定义“~/”(HOME 目录)的值

Is that possible to redefine the value of "~/" (HOME dir) in linux C program (no root authority)

这是我的代码 test.c:

int main(int argc, char* argv[])
{
    char* newhome = getenv("HOME");
    strcat(newhome, "/myDir");
    setenv("HOME", newhome, 1);
    printf("ENV: %s\n", getenv("HOME"));
    printf("ARG: %s\n", argv[1]); 
    return 0;
}

"HOME" env 已在此程序中设置为“/home/user/myDir”。但是当我用“~/”arg编译和运行我的代码时,我得到这样的输出,即给定的“~/”arg仍然被解析为默认"HOME" env值“/home/user", 而不是新的设定值 "/home/user/myDir":

$ cc test.c -o test
$ ./test ~/
ENV: /home/user/myDir
ARG: /home/user
$

那么如果我给arg“~/”,我应该如何修改我的代码来获取"HOME"的新设置值,比如这个输出:

$ ./test ~/
ENV: /home/user/myDir
ARG: /home/user/myDir
$ ./test ~/../
ENV: /home/user
ARG: /home/user

当您 运行 您的程序时,它将 运行 作为一个单独的进程。由于每个进程都有自己的环境,setenv 调用将更改该环境中的 HOME 变量。

当程序退出时,您 return 到 shell 进程及其环境。在那种环境下,HOME.

没有任何变化

首先,程序启动时会设置程序的所有参数。

第二个波浪号 ~ 在开始您的程序之前被 shell 扩展。

波浪号扩展由 shell 在您的应用程序运行之前执行,因此更新环境变量不会影响命令行参数。