因此,在一个目录中/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
运行脚本时不需要您位于某个目录中)。