是否可以在 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 在您的应用程序运行之前执行,因此更新环境变量不会影响命令行参数。
这是我的代码 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 在您的应用程序运行之前执行,因此更新环境变量不会影响命令行参数。