繁体   English   中英

bash:从路径运行时,在当前目录中运行另一个程序

[英]bash: Run another program in the current directory while running from path

我有一个Java CLI脚本,可将rgb名称转换为十六进制代码(例如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 /中而不是/ home / me / utils /中寻找rgb2hexConv。 反正有没有获得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:/ home / me / utils / rgb2hex / rgb2hexConv原因:java.lang.ClassNotFoundException:.home.me.utils.rgb2hex.rgb2hexConv //长堆栈跟踪找不到主要类别:/ home / me / utils / rgb2hex / rgb2hexConv。 程序将会退出。

关于以下两点:

  1. $ 0包含文件名和目录
  2. java命令似乎将“ /”替换为“。”。

$0变量将包含的完整路径。 因此,以下应工作:

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

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

以下修订对其进行了修复:

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

看来您需要java命令上-cp修饰符来告诉它搜索某些目录。 并且您需要使用dirname来获取$0的目录

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM