2015-04-01 2 views
0

Я пытаюсь создать сценарий BASH, который будет запускать для меня команду. Это пример одной из команд:BASH - команда xargs не найдена

function systemStart { 
    ./ORBMarkerDetection $1 $2 $3 | xargs -n3 java -jar ../../system/layers/out/artifacts/layers_jar/layers.jar 
} 

Но когда побежал я получаю ошибку (имеется в виду выше линии):

./runActivities.sh: line 7: xargs: command not found 

Я могу запустить эту команду в терминал с успехом, поэтому я не уверен, почему это не будет работать в BASH-скрипте?

Я вызываю функцию следующим образом:

systemStart $PATH/1.1/cupCupboard.png $PATH/1.1/kitchenDoor.png $PATH/1.1/tap.png 
+0

ли значение переменной $ PATH в сценарии отличается от в терминале? – user4098326

+0

Я проведу только команду, но скопирую прямо с терминала. Путь тот же. – Colin747

+0

Я пробовал жестко кодировать путь, и есть еще одна проблема. Кажется, нет никаких скрытых дополнительных символов. – Colin747

ответ

4

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

В общем, вам следует избегать использования имен переменных верхнего регистра; то вы можете быть уверены, что ваш никогда не столкнется со встроенной переменной оболочки.

+0

В этом проблема, спасибо, что заметили это! – Colin747

0

(Вы, возможно, потребуется поставить полный путь в сценарии?)

Команда which может сказать вам полный путь к вещам.

[email protected]:~$ which xargs 
/usr/bin/xargs 

locate может также сказать вам расположение файлов

Наконец, то перебором полнотекстового поиска файловой системы, используя поиск:

[email protected]:~$ find/-name "xargs" 2> /dev/null 
/usr/bin/xargs