我的主场是编写一个shell。而且我必须使用$PS2。
但是当我编写这样的代码时:
char *ENV_ps2;
ENV_ps2 = getenv("PS2");我刚发现ENV_ps2指向了(null)。
我如何才能在我的程序中获得$PS2?
发布于 2012-05-08 23:40:15
PS1和PS2外壳变量不会导出,因此无法从子进程访问。你可以用一个简单的脚本来测试:
$ cat /tmp/pstest.sh
#!/bin/sh
echo PS1=$PS1
echo PS2=$PS2
$ /tmp/pstest.sh
PS1=
PS2=发布于 2012-05-09 01:45:05
在bash中,$PS1和$PS2是外壳变量,而不是环境变量(至少通常是这样)。它们在bash本身中设置为默认值,或者由用户以交互方式或在.profile或.bashrc等启动脚本中显式设置。
它们不能通过getenv()访问,也不能被派生子进程继承。它们由shell自身的shell变量机制在内部进行管理。
如果您正在编写自己的shell,那么做一些类似的事情可能是有意义的。
你可以看看bash的源代码。它既庞大又复杂,但搜索PS1和PS2可能会有所帮助。(您不必使用与bash完全相同的机制;您可能希望使用更简单的机制。)
(您可以输入export PS1将$PS1转换为环境变量,但这样做没有多大意义。)
发布于 2012-05-09 00:21:58
这些环境变量不会导出。
如果需要一种不可移植的方法,只需定义并导出一个任意的环境变量,并在.bashrc/.bash_profile中将PS1/PS2设置为该值。
例如:
# bashrc
MY_PS1="..........."
export $MY_PS1
...
...
...
PS1=$MY_PS1https://stackoverflow.com/questions/10501830
复制相似问题