Ошибка выполнения сценария оболочки в uclinux - PullRequest
1 голос
/ 07 января 2010

У меня есть простой сценарий оболочки:

myfunc()
{
        #print hello world
        echo "Hello World";
}

myfunc

Сценарий работает нормально, когда я выполняю на Linux-ПК, но когда я запускаю то же самое в uclinux, я получаю ошибку как "синтаксическая ошибка". В чем может быть причина проблемы?

Обновление:

Следующий код работает в uclinux:

####\#!/bin/sh
echo "Hello World"

Но следующий код не работает:

####!/bin/sh
myfunc()
{
        #print hello world
        echo "Hello World";
}

myfunc

Ответы [ 6 ]

1 голос
/ 13 октября 2010

Результат зависит от того, какую оболочку вы используете. Большинство оболочек uclinux на самом деле являются символическими ссылками на Busybox. Busybox реализует различные крошечные оболочки для различных требований к отпечатку памяти. Насколько я помню, только ash поддерживает синтаксис функции . Проверьте версию busybox и конфигурацию его сборки.

0 голосов
/ 18 ноября 2014

при использовании Busybox и hush
Сконфигурируйте свою часть оболочки BusyBox для поддержки функции:

make busyBox-menuconfig
Оболочки -> Функция поддержки .... (Должен быть проверен)

0 голосов
/ 16 января 2010

Если вы поместите myfunc() { #print hello world echo "Hello World"; } в одну строку, то

#print hello world echo "Hello World"; } интерпретируется как комментарий. Удалите деталь #print hello world и попробуйте снова.

0 голосов
/ 07 января 2010

Ваш фактический myfunc определен в одной строке, как вы это показываете? Это синтаксическая ошибка, так как вы комментируете множество вещей, включая }.

0 голосов
/ 07 января 2010

Ваш сценарий оболочки должен иметь строку shebang, которая заставит сценарий выполняться назначенной вами оболочкой. Это может уменьшить или устранить многие непредвиденные ошибки из-за различий в синтаксисе между оболочками, которые возникают при выполнении сценария текущей (или по умолчанию) оболочкой, которые могут отличаться по ряду причин.

Первая строка файла скрипта должна быть похожа на:

#!/bin/sh

с указанием пути и имени оболочки в соответствии с вашими потребностями.

0 голосов
/ 07 января 2010

Может быть, ваша установка uclinux использует другую оболочку?

Сказать «скрипт оболочки не работает» - все равно, что сказать «мой исходный код не работает». Конечно, фраза имеет смысл, только если вы говорите, на каком языке находится ваш исходный код. Аналогично для сценария оболочки: это bash? это кш? это тсш? Для uclinux я очень подозреваю, что это busybox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...