system () не работает для изменения командной строки - PullRequest
0 голосов
/ 06 июля 2019

Я использую C ++ в Ubuntu и хочу изменить командную строку.Если я введу PS1 = abc в командной строке, приглашение станет abc.

Однако, если я выполняю программу, которая вызывает систему («PS1 = ABC»), приглашение не изменится.

С другой стороны, system () работает нормально с другими командами, и командная строка подчиняется.

Ответы [ 2 ]

2 голосов
/ 06 июля 2019

PS1 - это переменная окружения. Каждый процесс имеет свой набор переменных среды.

Когда вы запускаете новый процесс, он наследует копию среды своего родителя. Любые изменения в среде процесса не влияют на среду его родительского процесса.

Функция system запускает новый дочерний процесс. Это означает, что system("PS1=ABC") запускает дочерний процесс, который устанавливает собственную переменную PS1 и затем завершает работу.

Чтобы изменить переменную среды в своем собственном процессе, используйте putenv (Linux и другие Unix-подобные) или SetEnvironmentVariable (Windows). Обратите внимание, что это по-прежнему не повлияет на ваш родительский процесс (вероятно, оболочку, из которой была запущена ваша программа), поэтому установка PS1 все равно не окажет никакого влияния, если вы впоследствии не запустите другую оболочку в качестве дочерней.

1 голос
/ 06 июля 2019

system(command) запускает подпроцесс. Всякий раз, когда он заканчивается, вся его среда исчезает.

Если вы хотите передать переменные окружения в подпроцесс, найдите fork() и exec().

Или, если вы используете Windows, CreateProcess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...