Я написал приложение cpp под названием MyShell, которое принимает в качестве параметров некое реальное имя оболочки (обычно bash) и его параметры. MyShell работает как оболочка для него.
Мне нужно изменить командную строку для внутренней оболочки, в частности, переменную среды PS1.
Я знаю, как это сделать из командной строки, используя PS1 env var:
$ PS1="[myshell]"$PS1
[myshell]$
Но это не так просто сделать из приложения cpp:
string newPS1 = "[myshell]" + string(getenv("PS1"));
setenv("PS1", newPS1.c_str());
if (execvp(shell, argv) < 0) {
cerr << "can not exec " << shell << ": " << strerror(errno) << endl;
exit(1);
}
afaik, когда вызывается bash, он выполняет команду из /etc/.bashrc или / etc / profile (в зависимости от пользовательских настроек). Эти scipts переопределяют PS1 вар тоже. Так что мой
setenv("PS1", newPS1.c_str());
не имеет никакого эффекта.
Есть предложения?