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

标签 linux bash 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 后收到以下输出

线程“main”中的异常 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 的建议添加。

关于linux - bash:从路径运行时在当前目录中运行另一个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1195488/

相关文章:

linux - 从 bash 脚本返回错误的 BASH 变量

linux - 在可运行的 jar 中停止子线程

linux - 如何在转义反斜杠的同时在行匹配后插入文件内容

linux - 创建一个不解释任何内容的 heredoc

python - 在交互式 Python 中,如何明确导入模块

visual-studio - 如何获取 IVsProject 的完整路径、名称?

linux - 如何使用 bash 脚本替换文件名中的空格

linux - 使用普通用户删除 www-data 拥有的文件

linux - sed如何在第一行末尾添加带竖线的变量

windows - android-studio项目报错.zip解压: path too long