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