Shell S-Lang (slsh): captura de saída do comando em uma variável

1

Em slsh eu sei que tenho que! -prefixar um comando para executá-lo:

!ls 

Como posso capturar sua saída em uma variável?

    
por antonio 14.08.2014 / 15:20

1 resposta

1

Não consigo encontrar nada nos documentos sobre uma maneira de fazer isso diretamente, mas você pode criar funções para fazer isso por conta própria com relativa facilidade, com a ajuda de popen .

Se você quiser pegar toda a saída em uma lista de strings, você pode fazer isso:

define grab_output (command)
{
    variable fp, lines;

    fp = popen (command, "r");
    if (fp == NULL)
        throw OpenError, "Failed to popen ($command)";
    lines = fgetslines(fp);
    () = fclose (fp);
    return lines;
}

Se você quiser processar cada linha conforme ela está chegando, usar algo assim provavelmente seria melhor:

define display_output (command)
{
    variable fp, line;

    fp = popen (command, "r");
    if (fp == NULL)
        throw OpenError, "Failed to popen ($command)";
    foreach line (fp) using ("line")
    {
        printf("% 5d - %s", strlen(line), line);
    }
    () = fclose (fp);
}

Uso:

variable line;
variable lines = grab_output("/usr/bin/cal");
foreach line (lines)
{
    printf("stdout: %s", line); 
}

display_output("cat t.sl");

Aviso: isso foi simplesmente reunido a partir de exemplos no guia S-Lang , na verdade não conhece a língua.

    
por 15.08.2014 / 09:06