A saída de redirecionamento de um programa para um arquivo falha

3

Então eu tenho um programa que permite chamá-lo foo. Eu estou tentando redirecionar sua saída de terminal para um arquivo usando o seguinte comando.

foo > ./someFile.txt

Agora, quando executo esse comando, someFile.txt é criado, mas está vazio. Alguma sugestão sobre como eu poderia redirecionar a saída do terminal?

    
por Murphy316 04.10.2016 / 20:53

2 respostas

8

É um comportamento esperado, que um arquivo someFile.txt será criado. Se esse arquivo contém ou não alguma coisa, depende do que seu programa foo deve fazer.

Qualquer que seja o problema que você esteja encontrando, não parece estar relacionado ao redirecionamento de saída. Você pode tentar seguir o comando como um teste:

cat > someFile.txt

digite qualquer coisa. Tudo o que você digitou será redirecionado para someFile.txt (final com ctrl + d ).

Por outro lado, o arquivo de saída está sendo criado pelo seu shell, não pelo seu programa foo . Mesmo se você digitar um comando inexistente, o arquivo de saída ainda será criado (vazio):

/bin/nonexistent > zzz
    
por 04.10.2016 / 21:01
1

Outra possibilidade é que foo use isatty e não escreva nada para stdout se stdout não apontar para algum lugar interativo.

SYNOPSIS

#include <unistd.h>
int isatty(int fd);

DESCRIPTION The isatty() function tests whether fd is an open file descriptor referring to a terminal.

Este pequeno programa em Python demonstra isso:

import sys, os

if sys.stdout.isatty():
    print "Hello, tty %s" % os.ttyname(1)
else:
    print "stdout: not a typewriter: how boring"

Como este pequeno programa em C:

#include <stdio.h>
#include <unistd.h>

int main (void) {
    if ( isatty(1) ) {
        printf("Hello, tty %s\n", ttyname(1));
    } else {
        printf("stdout: not a typewriter: how boring\n");
    }
    return 0;
}

Ambos os programas têm o mesmo comportamento:

$ ./isatty > notatty ; cat notatty
stdout: not a typewriter: how boring

$ ./isatty.py
Hello, tty /dev/pts/1

$ ./isatty | cat
stdout: not a typewriter: how boring

Os programas podem escolher como, o que e se devem ou não ser impressos com base no fato de estarem sendo redirecionados.

Uma aplicação comum é evitar a gravação de seqüências de escape ANSI lidas por terminais ( \e[33;1m , etc) para colorir texto em arquivos, o que parece feio e confunde analisadores.

    
por 05.10.2016 / 02:23