system()无法用于修改命令行提示符

时间:2019-07-05 22:57:57

标签: c++ ubuntu console

我在Ubuntu中使用C ++,并且想要修改命令提示符。如果在命令行中输入PS1 = abc,则提示符将变为abc。

但是,如果我执行一个调用系统的程序(“ PS1 = ABC”),则提示不会改变。

另一方面,system()似乎可以在不同的命令下正常工作,并且遵循命令行。

2 个答案:

答案 0 :(得分:2)

PS1是环境变量。每个进程都有自己的一组环境变量。

启动新进程时,它将继承其父级环境的副本。对流程环境的任何更改都不会影响其父流程的环境。

system函数启动一个新的子进程。这意味着system("PS1=ABC")启动一个子进程,该子进程设置自己的PS1变量,然后退出。

要在自己的过程中修改环境变量,请使用putenv(Linux和其他类似Unix的操作系统)或SetEnvironmentVariable(Windows)。请注意,这仍然不会影响您的父进程(可能是从中启动程序的外壳程序),因此设置PS1仍然不会有任何影响,除非您随后作为孩子启动另一个外壳程序。

答案 1 :(得分:1)

system(command)开始一个子过程。每当完成时,整个环境都消失了。

如果要将环境变量传递给子流程,请查找fork()exec()

或者,如果您使用的是Windows,则CreateProcess