2010-12-03 2 views
2

특정 LD_LIBRARY_PATH을 시스템 전체의 libpcap 대신 수정 된 버전으로로드하려고합니다.펄 모듈을 로딩하기 전에 ld.so 경로 수정하기

물론이 스크립트는 LD_LIBRARY_PATH=/blah ./script_name으로 전체 스크립트를 실행하면 작동합니다. 사용자에게 투명하게 만들고 싶습니다. 따라서 $ENV{'LD_LIBRARY_PATH'}을 설정해 보았습니다. 그러나 행동을 바꾸지는 않습니다. 나는 BEGIN 블록에 넣어서 다른 use-s보다 먼저 작동하도록 만들었지 만 거기에는 행운이 없었습니다.

스크립트의 일부가 실행되기 전에 프로세스 시작 부분에 모든 configs/구성을로드하는 것이 원인으로 의심됩니다. 그것을 작동시키는 방법이 있습니까?

내가 바보 같은 것들을 피하기 위해 싶습니다

if (check_parent()) { $ENV...=.... ; `$0` ; exit } 

- 당신은 을 대체 할 수

+3

변수를 내보내고 perl 스크립트를 실행하는 래퍼 bash 스크립트를 사용하는 것은 어떻습니까? – thkala

+0

@thkala : 물론 작동하지만, 이미이 스크립트에 대한 또 다른 래퍼가 있습니다 (그리고 env 변수를 설정하는 것은 실제로 책임이 없습니다). 그리고 어느 시점에서 모든 계층을 관리하는 것이 어려워 질 것입니다. 나는 외부 도우미없이 이것을 할 수있는 방법을 찾고있다. – viraptor

답변

5

(제안되었다 또는 외부 래퍼를 덜 cruft에 임의 래퍼를, 더 나은) 스크립트의 맨 위

#!/bin/sh 
LD_LIBRARY_PATH="/blah:$LD_LIBRARY_PATH" 
export LD_LIBRARY_PATH 
exec perl -x -S "$0" "[email protected]" || exit 1 
#!perl 

# rest of your script 
+0

이것은 미치고 잘못되었습니다 ... 아마 그것을 사용합니다. – viraptor

+0

두려움이없고 독창적입니다. 내 종류의 쓰레기. +100000. - 잽바 – DVK

0

왜 Perl 스크립트 내부의 LD_LIBRARY_PATH 설정이 효과가 없는지는 Perl이 실행 중이고 동적 로더가 이미 LD_LIBRARY_PATH를 읽고 다시 읽지 않습니다. 따라서 BEGIN 블록조차 너무 늦습니다. 동적 로더는 이미 필요한 내용을 이미 읽었습니다.

관련 문제