我正在开发一个带有Angstrom 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之间的区别。有什么区别?
答案 0 :(得分:1)
我的第一个猜测是路径/home/root/Desktop/BBTCP
中的一个文件夹是链接。如果vehicleDetect
是一个脚本并且它以递归方式调用自身,那么这个链接可能会让它感到困惑。
如果情况并非如此,请尝试sh -x /home/root/Desktop/BBTCP/out/vehicleDetect
并查看打印内容。
最后,检查文件夹/home/root/Desktop/BBTCP
中的内容。那里可能有一个可执行文件sh
。如果您的路径包含.
,则可能会执行不同的shell。
答案 1 :(得分:0)
似乎/home/root/Desktop/BBTCP/out/vehicleDetect
正在调用构建在不同架构上的二进制文件(可执行文件)。
sh
和./
之间的主要区别在于./
会尝试将文件本身作为可执行文件执行,而sh
会为您执行此操作。可能是文件开头有一个奇怪的幻数,但你会期望sh
抱怨这个。
最好猜测虽然它是文件开头的#!
行,它包含无效字符或引用一个奇怪的文件。例如,您是否从另一个具有不同行结尾的操作系统(如Windows)中提取此脚本文件?当文本文件脚本尚未转换但只是复制时,我看到了类似的效果。也许你以一种奇怪的格式下载它?
选中od -xc /home/root/Desktop/BBTCP/out/vehicleDetect
并查看第一行。