2009-07-28 12 views
0

rgb 이름을 헥사 코드 (예 : 144 132 146이 # 908492가 됨)로 변환하는 Java CLI 스크립트가 있습니다. 그러나, 나는 모든 터미널에서 그것을 실행할 수 있기를 원합니다. 이 파일을 실행할 수 있도록 저도 같은 폴더에 bash는 스크립트를 넣어 :bash : 경로에서 실행 중일 때 현재 디렉토리에서 다른 프로그램 실행

배쉬 스크립트는 그냥 간단하다 :

#!/bin/bash 
java rgb2hexConv $1 $2 $3 

그러나, 나는이 경로를 통해 코드를 실행하면, 나는 오류를 얻을 rgb2hexConv 파일을 찾을 수 없습니다.

도 :

/ 
    /home/ 
    /home/me/ 
     /home/me/someRandomDir/ (running from here does not work) 
     /home/me/utils/ (in path) (running from here works) 
     - rgb2hex (bash script) 
     - rgb2hexConv.class (java program) 

내 생각 엔 그것은/가정/ME/someRandomDir에 rgb2hexConv을 찾고 있다는 것입니다/반대/홈/ME/유틸 /. 어쨌든 bash 스크립트의 디렉토리를 얻을 수 있습니까?

편집 : ./rgb2hexConv를 사용하는 스크립트를 변경하면 다음과 제공 :

Exception in thread "main" java.lang.NoClassDefFoundError: //rgb2hexConv 
Caused by: java.lang.ClassNotFoundException: ..rgb2hexConv 
// long stack trace removed 
Could not find the main class: ./rgb2hexConv. Program will exit. 

편집 2 (첫 번째 줄의 끝에있는 비트가없는 코멘트 만 실제 출력) : $ 0 다음과 같은 출력을 사용하여에서 시도 후 스레드에서

예외를 받았습니다했다 "기본"java.lang.NoClassDefFoundError가 :/홈/ME/유틸은/rgb2hex/rgb2hexConv 에 의한 : java.lang.ClassNotFoundException가 : .home .me.utils.rgb2hex.rgb2hexConv // 긴 스택 추적 /home/me/utils/rgb2hex/rgb2hexConv 메인 클래스를 찾을 수 없습니다. 프로그램이 종료됩니다. 이것에 대해

두 가지 :

  1. $ 0 파일 이름뿐만 아니라 디렉토리로서 java 명령은 "/"로 대체 될 것으로 보인다
  2. 을 할 수 있습니다. "".

답변

2

$0 변수에는. 그래서, 다음과 같은 작업을해야합니다 :

java -cp $(dirname $0) rgb2hexConv $1 $2 $3 

-cp는 마차의 제안에 따라 추가되었습니다.

+0

$ 0의 전체 파일 이름과 디렉토리를 포함해야합니다. – Macha

+0

그것을 지적 해 주셔서 감사합니다. 나는 그것을 바로 잡았다. –

+0

나는 그것을 시도하고 그것은 작동하지 않았다. 그래서 java 명령에 대한 문서를 찾았는데 현재 디렉토리에서만 작동합니다. 다른 dir을 사용하려면 -cp 인수를 사용하여이를 지정해야합니다. – Macha

0

다음 개정을 고정 : 당신이 특정 디렉토리를 검색하도록 지시하는 -cp modifier on the java command을 필요로 나타납니다

#!/bin/bash 
java -cp $(dirname $0) rgb2hexConv $1 $2 $3 

. 그리고 dirname을 사용하여 $0

관련 문제