S-Lang shell (slsh):捕获变量中的命令输出

S-Lang shell (slsh):捕获变量中的命令输出

在 slsh 中,我知道我必须在命令前面加上 !-前缀才能执行它:

!ls 

如何在变量中捕获其输出?

答案1

我在文档中找不到任何有关直接执行此操作的方法的内容,但您可以在popen.

如果您想将所有输出抓取到字符串列表中,您可以这样做:

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;
}

如果您想在每一行到来时处理它们,那么使用这样的东西可能会更好:

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);
}

用法:

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

display_output("cat t.sl");

警告:这只是从示例中拼凑而成S-语言指南,我其实不懂这种语言。

相关内容