Como eu corro o STDOUT de um comando de gato [duplicado]

0

Digamos que eu inicie um processo cat para aguardar alguma entrada. por exemplo,

$ cat > out.log

Em outro terminal, posso identificar seus dados PID e feed em seu descritor de arquivo 0 (zero = STDIN), assim:

$  echo "hello" > /proc/2357/fd/0

E então o primeiro terminal reage:

$ cat > out.log
hello

Algumas perguntas: 1) A string "hello" aparece no terminal em vez de ser redirecionada para o arquivo, é devido à natureza do programa cat (ele apenas foca no tty / foreground)?

2) Eu não posso seguir o STDOUT do mesmo processo:

tail -f /proc/2357/fd/1
...

Nada aparece. Alguma conjectura sobre o que está acontecendo aqui?

    
por theMarceloR 29.06.2018 / 23:27

2 respostas

3

/ proc / 2357 / fd / 0 é o descritor de arquivo 0 do processo cat, que é o próprio terminal. / proc / 2357 / fd / 1 é o descritor de arquivo 1 do processo cat, que você conectou ao arquivo out.log.

Agora, se você fizer um eco em / proc / 2357 / fd / 0, ele irá para o terminal, porque esse é o arquivo ao qual o descritor se refere.

Se você fizer alguma coisa em echo / proc / 2357 / fd / 1, ele irá para out.log, mas não via cat!

Você não pode repetir algo no processo dessa maneira.

    
por 01.07.2018 / 11:20
1

Você pode querer dar uma olhada no comando tee (1), que é basicamente um entroncamento para comandos unix: ele redireciona seu stdin para stdout e um arquivo (o qual você pode então fazer o tail -F)

    
por 01.07.2018 / 16:36