我在Ubuntu中使用C ++,并且想要修改命令提示符。如果在命令行中输入PS1 = abc,则提示符将变为abc。
但是,如果我执行一个调用系统的程序(“ PS1 = ABC”),则提示不会改变。
另一方面,system()似乎可以在不同的命令下正常工作,并且遵循命令行。
答案 0 :(得分:2)
PS1
是环境变量。每个进程都有自己的一组环境变量。
启动新进程时,它将继承其父级环境的副本。对流程环境的任何更改都不会影响其父流程的环境。
system
函数启动一个新的子进程。这意味着system("PS1=ABC")
启动一个子进程,该子进程设置自己的PS1
变量,然后退出。
要在自己的过程中修改环境变量,请使用putenv
(Linux和其他类似Unix的操作系统)或SetEnvironmentVariable
(Windows)。请注意,这仍然不会影响您的父进程(可能是从中启动程序的外壳程序),因此设置PS1
仍然不会有任何影响,除非您随后作为孩子启动另一个外壳程序。>
答案 1 :(得分:1)
system(command)
开始一个子过程。每当完成时,整个环境都消失了。
如果要将环境变量传递给子流程,请查找fork()
和exec()
。
或者,如果您使用的是Windows,则CreateProcess
。