[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12 유닉스 명령의 실행

m4 내부에서 유닉스 명령어를 실행하는 약간의 내장 매크로가 준비되어 있다.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.1 간단한 명령을 실행하기

어떠한 셀 명령어든지 syscmd를 사용하여 실행할 수 있다.

syscmd(shell-command)

이것은 쉘명령어로 shell-command를 실행한다.

syscmd는 확장되지 않으며 shell-command로부터 출력되지 않는다. shell-command로부터의 출력이나 에러메시지는 m4에 의해 읽히지 않는다. 명 령어의 출력을 처리하고 싶다면 See section 명령의 출력으로 부터 읽기.

명령어를 실행 할 때 중요한 점은 m4는 자신의 출력버퍼를 청소해버린다는 것이다. shell-command의 표준입력, 표준출력, 에러출력은 m4의 그것과 동일하 다.

내장 매크로 syscmd는 인자가 있어야만 인식된다.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.2 명령의 출력으로 부터 읽기

유닉스 명령어를 실행하고 난 결과로서의 출력으로 부터 m4가 읽어들이기를 바란다면 esyscmd를 사용하면 된다.

esyscmd(shell-command)

이것은 쉘명령어 shell-command의 표준출력으로 확장한다.

명령어를 실행할 때 주의할 점은 m4는 자신의 출력 버퍼를 청소해 버린다는 것이다. 기본적으로 shell-command의 표준입력과 에러 출력은 m4의 그것과 동 일하다. shell-command의 에러 출력은 확장되는 일부분이 아니다. 그것은 m4의 에러출력으로 나타난다.

여러분들이 현재 있는 디렉토리가 GNU m4 배포본의 ‘checks’ 디렉토리라고 가정하자. 그러면..

define(`vice', `esyscmd(grep Vice ../COPYING)')
⇒
vice
⇒  Ty Coon, President of Vice
⇒

esyscmd의 확장에서 뉴라인문자가 지겹게 따라온다는 것을 기억하자.

내장 매크로 esyscmd는 인자가 있을 경우에만 인식된다.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.3 종료 코드

쉘 명령어가 제대로 실행되었는 지를 알려면 sysval을 사용하면 된다.

sysval

이것은 syscmdesyscmd를 사용한 마지막 쉘 명령어의 실행의 종료코드로 확장된다.

syscmd(`false')
⇒
ifelse(sysval, 0, zero, non-zero)
⇒non-zero
syscmd(`true')
⇒
sysval
⇒0

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.4 임시파일의 이름 만들기

syscmdesyscmd에서 명시된 명령을 실행할 때 출력을 처리하기 위해서나 어떤 다른 목적 때문에 임시파일이 필요할 지도 모른다. 내장 매크로 maketemp는 임시적으로 사용할 파일의 이름을 만든다.

maketemp(template)

이것은 문자열 template를 근간으로 해서 존재하지 않는 파일의 이름으로 확 장된다. 문자열의 끝부분은 ‘XXXXXX’로 되어야 한다. 이 여섯 개의 X는 보통 m4 프로세스의 프로세스 아이디를 포함하는 어떤 것으로 대치되어 파일이름의 유일성을 보장한다.

maketemp(`/tmp/fooXXXXXX')
⇒/tmp/fooa07346
maketemp(`/tmp/fooXXXXXX')
⇒/tmp/fooa07346

이 예에서와 같이 maketemp를 여러번 호출하는 것은 같은 문자열로 확장된 다. 파일이 다음번 호출때까지 만들어지지 않았다면 두 번째 매크로의 호출은 같은 이름으로 확장될 것이다.

내장 매크로 maketempd 는 인자가 있을 때에만 인식된다.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated on April 12, 2025 using texi2html 5.0.