2012-07-31 5 views
1

사용자가 JAVA_HOME 경로를 매개 변수로 전달하는 쉘 스크립트를 작성하고 있습니다. JAVA_HOME 경로가 유효한지 여부를 확인하고 싶습니다. 그렇다면 전달 된 입력 경로가 exe 파일 (Unix 실행 파일)인지 여부를 어떻게 확인할 수 있습니까? 사용자가/usr/bin/java를 전달한 경우 - 유효한지, 사용자가 /usr/bin/test.txt (일부 텍스트 파일)을 전달한 경우 - 유효하지 않은 경우를 가정하십시오. 그렇다면 파일이 Unix 실행 파일 유형인지 여부를 어떻게 확인할 수 있습니까?쉘 파일이 Unix 실행 파일인지 확인하는 스크립트

나는/usr/bin에도 true를 반환하므로 rite check가 아닌 -x로 시도했습니다.

+0

문제가있는 곳에서 스크립트 스 니펫을 게시하십시오. – rkyser

답변

5

가장 쉬운 방법은 file 명령을 사용하는 것입니다.

$ file /usr/bin 
/usr/bin: directory 
$ file /usr/bin/java 
/usr/bin/java: Mach-O universal binary with 2 architectures 
/usr/bin/java (for architecture x86_64): Mach-O 64-bit executable x86_64 
/usr/bin/java (for architecture i386): Mach-O executable i386 
$  

file의 출력을 grep하여 적절한 문자열 (예 : "실행 가능".

0

유닉스 "실행 파일"은 실행 속성이 설정된 파일입니다. 예를 들어, pdf 문서에 대한 실행 권한을 설정할 수 있기 때문에 이에 의존 할 수 없습니다.

아마도 파일 형식을 감지하기 위해 사용해야하는 것은 file 명령 일 것입니다. 파일이 2 진 또는 일반 텍스트인지 여부를 알려줍니다.

0

테스트를위한 매뉴얼 페이지는 -x 파일이 존재하고 실행 가능한 경우가

-x 파일 트루하지 않을 것을 아주 분명하다. True는 실행 플래그가 켜져 있음을 나타냅니다. file이 디렉토리이면 true는 파일을 검색 할 수 있음을 나타냅니다.

그러나 파일이 존재하고 일반 파일 인 경우 당신은 -f-r

-f 파일 참으로이를 결합합니다.

-r file 파일이 존재하고 읽을 수 있으면 참.

파일에 속성이 있어야 실행 파일이 될 것입니다.


사용자가 이러한 속성을 비 실행 파일로 설정할 수 있지만 사용자 오류 일 가능성이 있습니다.


맨 페이지의 일부는 Mac OS 10.5 버전에서 발췌 한 것입니다. 다른 시스템에서는 약간 다른 것처럼 보일 수 있습니다 (특히 Linux).

관련 문제