想知道如何从 C 完成这些事情之一,以便它像从~/.bashrc
或一样持续存在~/.bash_profile
:
export PATH=~/bin:$PATH
export PS1="$ "
想知道我是否应该使用execl
命令有点像这样:
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
int main (void) {
return execl("/bin/export", "...", NULL);
}
或者是否有另一种惯用的 C 方法来正确完成此操作。
答案1
您不能将变量从程序导出到父 shell,因为无法修改另一个进程的环境。
如果要设置子进程,请参见man setenv
或man execve
。
编辑
不同之处在于,它.bashrc
是由 shell 本身执行的,而不是由 shell 的子进程执行的。由于它是由 shell 执行的,因此它可以修改 shell 的环境。
解决此问题的唯一方法是创建将由 shell 执行的命令:
main ()
{
printf ("PATH=/dir\n");
}
然后在 Shell 中执行该命令的输出:
$(./myenv)
或者
./myenv > /tmp/file
source /tmp/file
但是修改其自身环境的仍然是 shell,它只是通过执行某些程序生成的命令来实现这一点。