2009-04-16 6 views
1

내가 환경 설정이 필요한 프로그램이 있다고 가정 해 봅시다. Let 's는 단지 Perl을 가장하고 환경을 수정하고 싶습니다 (도서관을 특별 장소로 검색하기 위해). 유닉스에서 표준 방식으로 일을 할 때마다 나는 값 비싼 대가를 치르고 융통성있게 처벌한다. 간단한 쉘 스크립트를 사용하여 프로세스 트리에 추가 프로세스를 삽입한다는 것을 알고 있습니다. 자체 프로세스 트리에 액세스하는 모든 프로세스는 약간의 루프가 발생할 수 있습니다. 사소한 방식으로 재귀적인 것은 환경의 여러 확장을 방어해야합니다. 프로그램 파이프 (또는 STDIN, STDOUT 또는 STDERR 닫기 및 열기)에 닮은 것은 가장 큰 관심사입니다. 나는 나 자신에게 무엇을하고 있는가?쉘 스크립트를 사용하여 프로그램을 래핑하는 함정?

답변

3

내가 뭘하고 있니?

아무것도하지 말고 자신을 모두 알아 듣겠습니까?

환경을 설정하기 위해 쉘 스크립트에서 프로그램을 감싸는 것은 실제로 매우 표준 적이며 무언가를하려고하지 않는 한 위험은 매우 희박합니다. 정말입니다.

UNIX 프로세스는 설계 상 매우 저렴합니다. - exec 키워드를 사용하십시오. 새 프로세스를 포크하는 대신 exec 파일 대신에 exec 파일을 사용하십시오. 현재 하나. 그래서, 당신은 당신은 단지

#!/bin/bash - 
FOO=hello 
PATH=/my/special/path:${PATH} 
exec perl myprog.pl 

을 말할 것

#!/bin/bash - 
FOO=hello 
PATH=/my/special/path:${PATH} 
perl myprog.pl 

있었다 수있는 곳과 예비 과정은 사라집니다.

그러나이 트릭은 거의 가치가 없습니다. 하나의 카운터 - 예는 기본 쉘을 변경할 수없는 경우, 그것은 다음 등 프로세스 제어를위한 예상 된 동작을 얻고 있기 때문에, 단지 쉘을 실행하는 대신에

$ exec zsh 

말을 유용한다는 것입니다.

+0

저는 이것을 받아 들일 것입니다. 나는 많이 걱정한다. – ojblass

관련 문제