Bash
‘bash’ 或 ‘gnome-terminal’ 如何列印使用者和路徑資訊?
我想知道列印使用者和路徑資訊(例如“guest:~/home/guest$”)和命令輸出之間是否存在不同的機制。
當我嘗試對“bash”的標準輸入和標準輸出進行 PIPE 時,我只能獲得命令輸出,但不能獲得使用者和路徑資訊。
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
。我錯過了什麼?有任何想法嗎?
bash
具有互動模式和批處理模式。它根據標準輸入是否是終端進入相應的模式。bash # interactive cat|bash # non-interactive: stdin is a pipe not a terminal cat|bash -i # explicitly request interactive mode
在互動模式下
bash
將列印一個提示(可通過 PS1 變數配置)並設置其他內容以提供更使用者友好的環境。請閱讀
man bash
並尋找“互動式”以了解這些模式的所有差異。