Bash

‘bash’ 或 ‘gnome-terminal’ 如何列印使用者和路徑資訊?

  • March 24, 2015

我想知道列印使用者和路徑資訊(例如“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,

當我執行上面的程式碼並寫入lsself.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並尋找“互動式”以了解這些模式的所有差異。

引用自:https://unix.stackexchange.com/questions/192134