我的家乡是写一个shell。我必须使用$PS2
.
但是当我写这样的代码时:
char *ENV_ps2;
ENV_ps2 = getenv("PS2");
我刚刚发现ENV_ps2
是指向(null)
.
我怎么能$PS2
在我的程序中获得?
我的家乡是写一个shell。我必须使用$PS2
.
但是当我写这样的代码时:
char *ENV_ps2;
ENV_ps2 = getenv("PS2");
我刚刚发现ENV_ps2
是指向(null)
.
我怎么能$PS2
在我的程序中获得?
和shell 变量不会被导出PS1
,因此无法从子进程访问。您可以使用一个简单的脚本对此进行测试:PS2
$ cat /tmp/pstest.sh
#!/bin/sh
echo PS1=$PS1
echo PS2=$PS2
$ /tmp/pstest.sh
PS1=
PS2=
在 bash 中,$PS1
and$PS2
是 shell 变量,而不是环境变量(至少通常如此)。它们在 bash 本身中设置为默认值,或者由用户以交互方式或在启动脚本(例如 或 )中显式.profile
设置.bashrc
。
它们不能通过 访问getenv()
,并且它们不会被分叉的子进程继承。它们由 shell 自己的 shell 变量机制在内部进行管理。
如果您正在编写自己的 shell,那么做类似的事情可能是有意义的。
您可以查看 bash 源代码。它庞大而复杂,但寻找PS1
并PS2
可能具有指导意义。(您不必使用 bash 使用的完全相同的机制;您可能想要更简单的东西。)
(你可以键入export PS1
变成$PS1
环境变量,但这样做没有多大意义。)
这些环境变量不会被导出。
如果您想要一种非便携式方法,您可以定义并导出任意环境变量,然后在 .bashrc/.bash_profile 中将 PS1/PS2 设置为该值。
例如:
# bashrc
MY_PS1="..........."
export $MY_PS1
...
...
...
PS1=$MY_PS1