「bash」または「gnome-terminal」は、ユーザーとパス情報をどのように印刷しますか? [閉鎖]

「bash」または「gnome-terminal」は、ユーザーとパス情報をどのように印刷しますか? [閉鎖]

ユーザーとパス情報(例: "guest:〜/home / guest $")印刷とコマンド出力の間に異なるメカニズムがあるかどうか疑問に思います。

"bash"のstdinとstdoutをパイプしようとすると、コマンド出力のみが得られ、ユーザーとパス情報は取得できません。

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,

上記のコードを実行して作成すると、lsフォルダself.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これらのモード間のすべての違いを確認するには、「インタラクティブ」を読んで参照してください。

関連情報