Странное поведение Ш.

Я разрабатываю приложение на плате Beaglebone с дистрибутивом Angstrom для Linux. Столкнулся с интересной проблемой.

Когда я выполняю:

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. Каковы различия?


person user1336117    schedule 13.09.2012    source источник
comment
думаю, дело в разнице между ./ и sh: но в обоих ваших примерах используется sh, и ни в одном из них не используется ./.   -  person cdarke    schedule 13.09.2012
comment
Что дает which sh в каждом каталоге и что дает путь к файлу/to/vehicleDetect?   -  person stark    schedule 14.09.2012


Ответы (2)


Мое первое предположение было бы в том, что одна из папок в пути /home/root/Desktop/BBTCP является ссылкой. Если vehicleDetect является сценарием и вызывается рекурсивно, то эта ссылка может ввести его в заблуждение.

Если это не так, попробуйте sh -x /home/root/Desktop/BBTCP/out/vehicleDetect и посмотрите, что это напечатает.

Наконец, проверьте, что находится в папке /home/root/Desktop/BBTCP. Там может быть исполняемый файл sh. Если ваш путь содержит ., может быть запущена другая оболочка.

person Aaron Digulla    schedule 13.09.2012
comment
Я нашел решение, Vehicledetect — это не скрипт, это исполняемый двоичный файл. поэтому использование sh не верно. Спасибо - person user1336117; 14.09.2012

Похоже, что /home/root/Desktop/BBTCP/out/vehicleDetect вызывает двоичный файл (исполняемый файл), созданный на другой архитектуре.

Основное различие между sh и ./ заключается в том, что ./ попытается выполнить сам файл как исполняемый файл, тогда как sh сделает это за вас. Возможно, в начале файла есть странное магическое число, но вы ожидаете, что sh пожалуется на это.

Скорее всего, это строка #! в начале файла, которая либо содержит недопустимые символы, либо ссылается на странный файл. Вы, например, принесли этот файл сценария из другой операционной системы (например, Windows), которая имеет другие окончания строк? Я видел подобные эффекты, когда скрипты текстовых файлов не были преобразованы, а просто скопированы. Может быть, вы скачали его в странном формате?

Сверьтесь с od -xc /home/root/Desktop/BBTCP/out/vehicleDetect и посмотрите на первую строку.

person cdarke    schedule 13.09.2012