S-Langシェル(slsh):変数へのコマンド出力のキャプチャ

S-Langシェル(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言語ガイド、実際には言語を理解していません。

関連情報