문제

2015-01-25 4 views
-1

나는 * .csh 스크립트 내에서 펄 스크립트를 실행하려고하지만, 나는 다음과 같은 오류 얻을 :문제

Can't open perl script "checkLength.perl": No such file or directory 

내가가 함께 할 수있는 뭔가가 생각을 펄 스크립트의 경로. 셸 스크립트 내에서 호출되지 않을 때 perl 스크립트를 잘 실행할 수 있지만 cshell 스크립트에서 호출 할 때 perl 스크립트가 실행되지 않습니다.

내가 펄 스크립트에 사용하는 shebang은 #!/usr/bin/perl입니다. 나는 체크했고 perl은 거기에 위치한다 (/ usr/bin/env perl에는 없다). 실행 파일인지 확인했습니다.

이 기능을 사용하려면 $ PATH를 편집해야합니까? 다른 csh 스크립트에서 호출하지 않고 perl 스크립트를 실행하면 혼란 스럽습니다.

+0

스크립트를 호출하는 순간 현재 작업 디렉토리를 확인하십시오. – nlu

+0

.csh 스크립트와 관련하여'checkLength.perl'의 경로는 무엇입니까? –

+0

흠, 확실하지 않습니다. 어떻게 찾았습니까? –

답변

1

물론 문제의 한 가지 분명한 해결책은 스크립트의 전체 경로를 사용하는 것입니다. 그러나 원래 구조와 정확히 일치하지 않는 설치에서는 스크립트가 중단되므로이 방법은 바람직하지 않습니다.

따라서 두 가지 가능성이 있습니다. perl 스크립트를 PATH 변수에 포함 된 잘 정의 된 위치에 넣으면 각 사용자 환경에서 실행되는 모든 프로그램이 PATH 변수를 찾습니다.

또는 호출 스크립트의 위치와 관련하여 잘 정의 된 위치가 있습니다. bash 스크립트가 somedir에 있고 perl 스크립트가 somedir/subdir에 있다고 가정하면 호출은 subdir/perlscript.pl이됩니다. 그런 다음 호출자의 작업 디렉토리에서 가능한 변경 사항과 독립적이되도록 bash 스크립트 시작시 호출 될 펄 스크립트의 현재 전체 경로를 판별 할 수 있습니다.

이에 대한 템플릿은 다음과 같습니다

#!/bin/bash 
FULLPATH=$(pwd)/subdir/somescript.pl 

# do something else, cd ... 

$FULLPATH 
0

내가 펄 스크립트를 가정하고는 배시 스크립트에 고정 된 상대 경로에 보관됩니다. 디렉토리 구조를 가정하면과 같이 될 :

  • (BASEDIR)/ /example.sh

  • (BASEDIR)/ /example.pl

시스템의 어느 곳에서나 bash 스크립트를 실행할 수있게하려면 BASEDIR을 가져 와서 Perl 스크립트의 상대 경로를 지정해야합니다.

#!/bin/bash 

BASEDIR=$(dirname $0) 
perl $BASEDIR/../perl/example.pl 

우리가 위의 일을하는 것은 당신의 bash는 스크립트는 참조로 bash는 스크립트의 위치를 ​​사용하여 Perl 스크립트의 상대적인 위치를 발견 한 후 전화 (BASEDIR/빈)의 위치를 ​​찾는 것입니다. 이제 어디서나 bash 스크립트를 호출하고 Perl 스크립트를 정상적으로 실행할 수 있습니다.