奇怪的“sh”行为

时间:2012-09-13 13:54:12

标签: linux bash sh angstrom-linux

我正在开发一个带有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之间的区别。有什么区别?

2 个答案:

答案 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并查看第一行。