我有一个将rgb名称转换为十六进制代码的java CLI脚本(例如144 132 146变为#908492)。但是,我希望能够从任何终端运行它。我将一个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)
我的猜测是它在/ home / me / someRandomDir /中寻找rgb2hexConv而不是/ 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后,收到以下输出
线程“main”中的异常java.lang.NoClassDefFoundError:/ home / me / utils / rgb2hex / rgb2hexConv 引起:java.lang.ClassNotFoundException:.home.me.utils.rgb2hex.rgb2hexConv //长堆栈跟踪 找不到主类:/ home / me / utils / rgb2hex / rgb2hexConv。程序将退出。
关于这一点的两件事:
java
命令似乎将“/”替换为“。”。答案 0 :(得分:2)
$0
变量将包含完整路径。因此,以下内容应该有效:
java -cp $(dirname $0) rgb2hexConv $1 $2 $3
根据Macha的建议添加了-cp。
答案 1 :(得分:0)
以下修正案修正了它:
#!/bin/bash
java -cp $(dirname $0) rgb2hexConv $1 $2 $3
您似乎需要-cp modifier on the java
command告诉它搜索某些目录。您需要使用dirname
来获取$0