Command-Substitution

S-Lang shell (slsh):在變數中擷取命令輸出

  • August 15, 2014

在 slsh 中,我知道我必須使用 !-prefix 一個命令來執行它:

!ls 

如何在變數中擷取其輸出?

我在文件中找不到任何關於直接執行此操作的方法,但您可以在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-Lang 指南中的範例拼湊而成,我實際上並不了解該語言。

引用自:https://unix.stackexchange.com/questions/150243