2016-12-19 2 views
2

나는/usr/local/flower 디렉토리에 존재하는 프로그램 인 flower.rb를 가지고있다. 동일한 디렉토리에도 존재하는 라이브러리를로드해야합니다. 내 OS 환경 경로에이 꽃 디렉토리를 포함 시켰습니다. 그리고 OS의 선택은 우분투 (Ubuntu)입니다.프로그램의 작업 디렉토리를 설정하는 방법은 무엇입니까?

/usr/local/flower 이외의 다른 디렉토리에서 flower.rb를 실행하면 프로그램이/usr/local/flower 디렉토리에도 존재하는 라이브러리를로드 할 수 없다는 오류 메시지가 표시됩니다. b/그들은 소스 코드에서 ./ [libraries]로로드됩니다. 예를 들어, 홈 디렉토리에서이 프로그램을 실행할 수있는 방법이 있는지

은 내가 하드 코드에/usr/지방/꽃/[라이브러리] 루비 프로그램을 변경할 수 있습니다 실현,하지만 난 궁금/home/seattle, 이러지 마.

또한 프로그램이 실행될 때 -o 스위치를 통해 출력을 생성합니다.

내 솔루션은/usr/지방/꽃 디렉토리로 변경 떠들썩한 파티 스크립트를 만드는 것이었다 프로그램을 실행 한 다음 flower.rb 프로그램이 호출 된 곳에서 PWD 디렉토리로 돌아갑니다. 문제는 -o 스위치입니다. 내가 -o [file]을하면 [file]은 flower.rb 프로그램이 실행될 때가 아닌/usr/local/flower 디렉토리에 기록됩니다.

이 문제를 해결하는 좋은 방법은 무엇입니까?

+0

"라이브러리"는 무엇을 의미합니까? 동적 라이브러리 (* .so. \ *)라면 디렉토리를'/ etc/ld.so.conf'에 추가하고'sudo ldconfig'를 실행하여 라이브러리 경로에 추가 할 수 있습니다. –

+0

루비 라이브러리. 시스템 전체 라이브러리가 아닙니다. –

답변

3

그것은 귀하의 질문에 상당히 분명하지 않다, 그러나 당신이 잘못 require을 사용하는 것으로 보인다. require$LOAD_PATH에서 스크립트를로드하기위한 것입니다. 현재 스크립트의 디렉토리를 기준으로 스크립트를로드하려면 require_relative을 사용하십시오.

당신이해야 현재 작업 디렉토리에 결코로드 스크립트 상대. 현재 작업 디렉토리는 스크립트가 아니라 사용자가 제어합니다. 어떻게 될지 전혀 모르실 겁니다. 2008 년에 현재 작업 디렉토리가 $LOAD_PATH에서 제거 된 이유가 있습니다. 깨 졌기 때문입니다.

+0

나는 이것을 이해한다. 내 스크립트는 현재 작업 디렉토리를 결정하고/usr/local/flower 디렉토리를 변경 한 다음 스크립트를 실행합니다. 스크립트는이 디렉토리에서 필요한 다른 Ruby 라이브러리를로드 한 다음 원래의 (PWD) 디렉토리로 다시 돌아와서 반환합니다. –

관련 문제