Como o 'bash' ou 'gnome-terminal' imprime informações de usuário e caminho? [fechadas]

1

Gostaria de saber se existe um mecanismo diferente entre as informações do usuário e do caminho de impressão (por exemplo, "guest: ~ / home / guest $") e as saídas de comando.

Quando tento aplicar stdin e stdout de "bash", só consigo obter saídas de comando, mas não informações de usuário e caminho.

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,

Quando executo o código acima e escrevo ls para self.p.stdin , ele apenas imprime o conteúdo da pasta, mas não guest:~/home/guest$ .

O mesmo acontece com o prompt de senha de ssh e sudo .

O que estou perdendo? Alguma idéia?

    
por Batuhan Tasdoven 24.03.2015 / 08:04

1 resposta

2

bash tem um modo interativo e um modo em lote. Ele entra no modo correspondente, dependendo se o stdin é um terminal ou não.

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

No modo interativo bash imprimirá um prompt (configurável pela variável PS1) e também configurará outras coisas para um ambiente mais amigável.

Por favor, leia man bash e procure por "interativo" para todas as diferenças desses modos.

    
por 24.03.2015 / 08:34