想知道如何從 C 中完成這些事情之一,以便它像從~/.bashrc
or一樣持續存在~/.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 修改自己的環境,它只是透過執行某些程式產生的命令來實現。