![为什么 newgrp 会改变我的 PS1 以及如何防止它?](https://linux22.com/image/26117/%E4%B8%BA%E4%BB%80%E4%B9%88%20newgrp%20%E4%BC%9A%E6%94%B9%E5%8F%98%E6%88%91%E7%9A%84%20PS1%20%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E5%AE%83%EF%BC%9F.png)
我有一个定制的 PS1 来显示几个参数。当我使用 切换到不同的组时newgrp
,它会将我的 PS1 切换为默认值 ($),这很烦人。即使我从更改的组切换回默认组,默认值仍然保留。
有什么方法可以阻止它这样做并保留我在 .profile 中设置的 PS1 吗?
>uname -a
SunOS he2unx207 5.10 Generic_147440-19 sun4u sparc SUNW,Sun-Fire-880
当然,如果我在 newgrp 之后资源化我的 .profile,PS1 会正确应用,但我很恼火,因为 newgrp 有效地取消了 .profile 中设置的内容。为什么它不能只更改我关联的有效组而不更改其他设置?
答案1
如果导出PS1
,则不应重置该值。来自索拉里斯星newgrp 联机帮助页:
任何未导出的变量都将重置为 null 或其默认值。导出的变量保留其值。系统变量(例如
PS1
、PS2
、PATH
、HOME
)将重置为默认值,除非它们已由系统或用户导出。例如,当用户具有PS1
$(默认)以外的主提示字符串 ( ) 并且尚未导出时PS1
,用户的PS1
主提示字符串将被设置为默认提示字符串 $,即使 newgrp 因错误而终止。请注意,shell 命令导出(请参阅sh
(1)和set
(1))是导出变量的方法,以便它们在调用新 shell 时保留其分配的值。
或者,您可以传递-
标志来newgrp
重新初始化环境,就像您刚刚登录一样。