如何从目录外部的 shell 文件运行已编译的 java 或 c 程序?

如何从目录外部的 shell 文件运行已编译的 java 或 c 程序?

因此,在一个目录中/home/pi/remoteinfo/temp/code 有一个名为 的 C 程序a.out和一个名为 的 shell 文件tempstart.sh

tempstart.sh 文件内的内容如下:

#!/bin/bash
./a.out

现在,当我进入时,/home/pi/remoteinfo/temp/code我可以打字./tempstart.sh,我的程序将开始执行。

但是当我尝试tempstart.h从其目录之外的任何地方运行时,我得到了 line 3: ./a.out: No such file or directory.

发生了什么事以及如何解决?

我使用的是带有默认操作系统的 Raspberry Pi 3

答案1

发生的情况是,脚本将在当前工作目录中运行命令./a.out,因为这就是写入脚本的内容;如果您从其他地方运行脚本,您的二进制文件是不在当前的工作目录,导致 shell 抛出您所看到的错误。

如果您想使用脚本来调用二进制文件,而不管从哪个目录调用它,您至少有四个选择:

  • 放入a.out您已有的目录中PATH,并停止将当前工作目录指定为 的位置a.out(例如,移至a.out$HOME/bin/a.out并将脚本更改为简单运行a.out而不是./a.out)。
  • 让脚本显式调用二进制文件的完整路径(例如./a.out,而不是,而不是/path/to/the/location/of/a.out
  • 将脚本添加到它是 PATH脚本的位置,并且不要指定当前目录作为二进制文件的位置(例如PATH="$PATH:/path/to/the/binary"; a.out
  • 有脚本在尝试运行脚本之前将工作目录移动到脚本的位置(例如cd /path/to/the/binary; ./a.out

答案2

./script.sh会假设您在同一目录中运行它。

假设a.out在 中/var/run/a.out,您可以更改tempstart.sh以包含完整的文件路径。

此时您可以从任何地方运行脚本(前提是a.out运行脚本时不需要您位于某个目录中)。

相关内容