파일 이름에 pid가 포함된 임시 파일로 생성된 프로세스를 리디렉션합니다.

파일 이름에 pid가 포함된 임시 파일로 생성된 프로세스를 리디렉션합니다.

myprogram터미널(bash)을 통해 생성하고 pid 1234(매번 다름)를 얻는다고 가정합니다 .

stdout 및 stderr을 이름이 지정된 임시 파일로 리디렉션하고 싶습니다 abc-$PID(PID가 1234인 경우 tempfile 을 사용하십시오 abc-1234.

이제 코드는 다음과 같습니다.

myprogram > /tmp/abc-$! 2>&1

그것은 작동하지 않습니다

도와주세요.

답변1

일반적으로 셸에서는 명령을 실행하기 전에 리디렉션이 구문 분석되고 처리됩니다. 따라서 쉘은 >구문 분석 시 subPID가 무엇인지 알 수 있는 방법이 없습니다 .

하지만 우리는 속일 수 있습니다... 우리는 우리 자신의 PID를 알고 exec실제 프로그램을 얻을 수 있습니다. 이렇게 하면 exec새 프로세스 ID가 생성되지 않으므로 프로그램은 시작할 때와 동일한 PID로 실행됩니다.

예를 들어:

$ cat  myprogram 
#!/bin/sh
echo hello.  I am $$
echo err >&2

$ cat wrapper 
#!/bin/sh

exec myprogram > foo-$$ 2>&1

$ ./wrapper 

$ ls
foo-10285  myprogram*  wrapper*

$ cat foo-10285 
hello. I am 10285
err

관련 정보