“bash”或“gnome-terminal”如何打印用户和路径信息?

“bash”或“gnome-terminal”如何打印用户和路径信息?

我想知道打印用户和路径信息(例如“guest:~/home/guest$”)和命令输出之间是否存在不同的机制。

当我尝试通过管道传输“bash”的标准输入和标准输出时,我只能获取命令输出,而不能获取用户和路径信息。

self.p = Popen(["bash", "-i"], bufsize=1, stdin=PIPE, stdout=PIPE)
self.p.stderr = self.p.stdout

self.t = Thread(target=self.listen_stdout)
self.t.daemon = True # thread dies with the program
self.t.start()

def listen_stdout(self):
    while True:
        c = self.p.stdout.read(1)
        print c,

当我运行上面的代码并写入时lsself.p.stdin它只打印文件夹的内容,但不打印guest:~/home/guest$

ssh与和的密码提示相同sudo

我缺少什么?有任何想法吗?

答案1

bash具有交互模式和批处理模式。它根据 stdin 是否是终端进入相应的模式。

bash        # interactive
cat|bash    # non-interactive: stdin is a pipe not a terminal
cat|bash -i # explicitly request interactive mode

在交互模式下,bash将打印提示(可通过 PS1 变量配置),并设置其他内容以获得更用户友好的环境。

请阅读man bash并查找“交互式”以了解这些模式的所有差异。

相关内容