首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux getenv()无法获取$PS1或$PS2

Linux getenv()无法获取$PS1或$PS2
EN

Stack Overflow用户
提问于 2012-05-08 23:37:15
回答 3查看 1.8K关注 0票数 8

我的主场是编写一个shell。而且我必须使用$PS2

但是当我编写这样的代码时:

代码语言:javascript
复制
char *ENV_ps2;
ENV_ps2 = getenv("PS2");

我刚发现ENV_ps2指向了(null)

我如何才能在我的程序中获得$PS2

EN

回答 3

Stack Overflow用户

发布于 2012-05-08 23:40:15

PS1PS2外壳变量不会导出,因此无法从子进程访问。你可以用一个简单的脚本来测试:

代码语言:javascript
复制
$ cat /tmp/pstest.sh
#!/bin/sh

echo PS1=$PS1
echo PS2=$PS2


$ /tmp/pstest.sh 
PS1=
PS2=
票数 8
EN

Stack Overflow用户

发布于 2012-05-09 01:45:05

在bash中,$PS1$PS2是外壳变量,而不是环境变量(至少通常是这样)。它们在bash本身中设置为默认值,或者由用户以交互方式或在.profile.bashrc等启动脚本中显式设置。

它们不能通过getenv()访问,也不能被派生子进程继承。它们由shell自身的shell变量机制在内部进行管理。

如果您正在编写自己的shell,那么做一些类似的事情可能是有意义的。

你可以看看bash的源代码。它既庞大又复杂,但搜索PS1PS2可能会有所帮助。(您不必使用与bash完全相同的机制;您可能希望使用更简单的机制。)

(您可以输入export PS1$PS1转换为环境变量,但这样做没有多大意义。)

票数 2
EN

Stack Overflow用户

发布于 2012-05-09 00:21:58

这些环境变量不会导出。

如果需要一种不可移植的方法,只需定义并导出一个任意的环境变量,并在.bashrc/.bash_profile中将PS1/PS2设置为该值。

例如:

代码语言:javascript
复制
# bashrc
MY_PS1="..........."
export $MY_PS1

...
...
...
PS1=$MY_PS1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10501830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档