0

我正在使用 Angstrom distrubition fo Linux 在 Beaglebone 板上开发应用程序。我遇到了一个有趣的问题。

当我执行:

sh /home/root/Desktop/BBTCP/out/vehicleDetect 192.168.10.29

在终端它说

/home/root/Desktop/BBTCP/out/vehicleDetect:     /home/root/Desktop/BBTCP/out/vehicleDetect:         cannot execute binary file

但是当我执行

cd /home/root/Desktop/BBTCP/

sh out/vehicleDetect 192.168.10.29

它开始工作了??

是什么原因以及为什么我无法使用第一个配置运行该应用程序?

我认为这是关于 ./ 和 sh 之间的区别。有什么区别?

4

2 回答 2

1

我的第一个猜测是路径中的一个文件夹/home/root/Desktop/BBTCP是一个链接。如果vehicleDetect是一个脚本并且它递归地调用自己,那么这个链接可能会混淆它。

如果不是这种情况,请尝试sh -x /home/root/Desktop/BBTCP/out/vehicleDetect查看打印的内容。

最后,检查文件夹中的内容/home/root/Desktop/BBTCP。那里可能有一个可执行文件sh。如果您的路径包含.,则可能会执行不同的 shell。

于 2012-09-13T14:18:30.050 回答
0

似乎/home/root/Desktop/BBTCP/out/vehicleDetect正在调用构建在不同架构上的二进制文件(可执行文件)。

sh和之间的主要区别在于./它将./尝试将文件本身作为可执行文件执行,而sh将为您执行此操作。可能是文件开头有一个奇怪的幻数,但你会sh抱怨这个。

最好的猜测,尽管它是#!文件开头的一行,其中包含无效字符或引用了一个奇怪的文件。例如,您是否从另一个具有不同行尾的操作系统(如 Windows)中引入了此脚本文件?当文本文件脚本没有被转换而只是被复制时,我已经看到了类似的效果。也许您以奇怪的格式下载了它?

检查od -xc /home/root/Desktop/BBTCP/out/vehicleDetect并查看第一行。

于 2012-09-13T14:44:28.293 回答