如何使用Golang获取环境变量PS1?

3

PS1是Bash提示符的环境变量。我可以通过执行echo $PS1来获取它。

我尝试使用os.Getenv来获取PS1,但是返回空值:

package main

import (
  "fmt"
  "os"
)

func main() {
  fmt.Println(os.Getenv("PS1"))
}

为什么会出现这种情况,我应该如何解决?谢谢。

2
这个变量是否已经设置?列出os.Environ会显示一个PS1=value对吗? - Mateusz Dymczyk
我可以通过 echo $PS1 来获取它。 - waitingkuo
你是用相同的用户启动该进程(我的意思是运行那个Go程序)吗? - Mateusz Dymczyk
是的。我发现无法通过 env | grep PS1 获取PS1,但可以通过 set | grep PS1 获取。这两者有什么区别吗? - waitingkuo
2
是的,set 可以看到 shell 的本地变量和环境变量,而 env 只能看到环境变量(这些变量被传递给子进程)。如果在 env 中找不到它,则您的 Go 程序将无法使用它,您需要正确地导出它。您可以在 SO 上查找更详细的关于 env vs set 的解释。 - Mateusz Dymczyk
谢谢~你能回复我的帖子吗?这样我就可以批准你的答案了。 - waitingkuo
1个回答

6

PS1可能没有被导出,这意味着它在bash的子进程中不会显示。

尝试:

export PS1

在运行应用程序之前

你还可以进行以下操作

PS1=$PS1 app

将其具体设置在子进程中


这是针对 sh/bash 的特定内容。csh shell 系列(包括 zsh?)对前者有不同的语法,而后者的可移植、与 shell 无关的方法是 env VAR=val command… - Dave C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接