2009-07-28 86 views
0

我有一个将rgb名称转换为十六进制代码的Java CLI脚本(例如144 132 146变为#908492)。但是,我希望能够从任何终端运行它。我把bash脚本在同一文件夹,以便它可以运行该文件:bash:从路径运行时在当前目录中运行另一个程序

的bash脚本是很简单的,只是:

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

然而,当我通过PATH运行代码,我得到的错误没有找到与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) 

我的猜测是,它在寻找rgb2hexConv在/ home/ME/someRandomDir /,而不是到/ home/ME/utils的/。有无论如何获得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:/首页/我/ utils的/ rgb2hex/rgb2hexConv 产生的原因:抛出java.lang.ClassNotFoundException:。家里.me.utils.rgb2hex.rgb2hexConv //长栈跟踪 找不到主类:/ home/me/utils/rgb2hex/rgb2hexConv。程序将会退出。这个

两件事情:

  1. $ 0包含文件名和目录
  2. java命令似乎“/”与被取代“”。

回答

2

$0变量将包含完整路径。所以,下面应该工作:

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

-cp已根据Macha的建议添加。

+0

$ 0包含完整的文件名以及目录。 – Macha 2009-07-28 17:25:49

+0

感谢您指出。我已纠正它。 – 2009-07-28 17:32:40

+0

我试过了,它没有工作。所以我查了一下java命令的文档,它只适用于当前目录。如果你想使用不同的目录,你必须使用-cp参数来告诉它。 – Macha 2009-07-28 17:35:12

0

如下修正固定它:

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

看来你需要的-cp modifier on the java command告诉它来搜索某些目录。并且您需要使用dirname来获取$0的目录

相关问题