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언어 가이드, 사실 언어를 이해하지 못합니다.

관련 정보