Os programas unix [semelhantes] são capazes de determinar aonde sua saída está indo? [duplicado]

6

Até recentemente, fiquei com a impressão de que os programas Unix-y não sabiam de onde sua saída ia, seja como padrão, redirecionada para um arquivo ou para um pipe. No entanto, uma pergunta não relacionada sobre U & L neste site trouxe à minha atenção o seguinte exemplo:

% echo "hello world" > file

% grep --color=auto lo file
hello world

% grep --color=auto lo file | cat
hello world

Obviamente, você não pode vê-lo aqui, mas o primeiro comando mostra 'lo' realçado, como esperado. No entanto, a segunda chamada, que passa por um pipe, não mostra cor. Isso sugere que grep estava ciente de que sua saída era direcionada para um tubo e evitava a emissão de cores. Como isso é feito?

    
por noffle 23.03.2012 / 15:41

3 respostas

11

É possível determinar se um descritor de arquivo se refere a um tty.

Confira a função isatty .

Alternativamente, você pode usar a função fstat que lhe oferece um pedaço de informação no arquivo.

    
por 23.03.2012 / 15:55
2

Sim, eles são. Existem vários métodos para determinar onde a saída está indo. Para uma comparação veja minha resposta para uma questão relacionada no stackoverflow .

    
por 23.03.2012 / 17:02
0

Facilmente. Diferentes maneiras podem ser usadas para determinar onde a saída está indo. Então, em python você poderia fazer algo parecido com

    /* CODE. Input will be parsed and executed */
int
PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
                     PyCompilerFlags *flags)
       {
    if (filename == NULL)
        filename = "???";
    if (Py_FdIsInteractive(fp, filename)) {
        int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
    
por 23.03.2012 / 19:39