~/.bashrc
またはの場合と同じように、C からこれらのことの 1 つを実現するにはどうすればよいかと考えています~/.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
別のプロセスの環境を変更することはできないため、プログラムから親シェルに変数をエクスポートすることはできません。
子プロセスを設定する場合は、man setenv
または を参照してくださいman execve
。
編集
違いは、 は.bashrc
シェルのサブプロセスではなく、シェル自体によって実行されることです。 シェルによって実行されるため、シェルの環境を変更できます。
これを回避する唯一の方法は、シェルによって実行されるコマンドを作成することです。
main ()
{
printf ("PATH=/dir\n");
}
次に、シェルでそのコマンドの出力を実行します。
$(./myenv)
または
./myenv > /tmp/file
source /tmp/file
しかし、シェルは依然として自身の環境を変更しており、何らかのプログラムから生成されたコマンドを実行することによってそれを行います。