2011-11-03 3 views
1

Я хотел бы выполнить серию команд, которые компилируют мою программу. Но, похоже, это не работает. Это мой сценарийВыполнение команды, хранящейся в переменной

#!/bin/bash 

task[0] = $(cd vssl/make/; make clean;) 
compile[0] = $(make all) 
error[0] = $(echo "We failed at vssl install") 

task[1] = $(cd ../../web/make/; make clean;) 
compile[1] = $(make install) 
error[1] = $(echo "We failed at web install") 

eval "$task[0]" 
if (eval "$compile[0]"); then 
    eval "$task[1]" 
    if (eval "$compile[1]"); then 
     echo "ALL DONE" 
    else 
     eval "$error[1]" 
    fi 
else 
    eval "$error[0]" 
fi 

Я попытался кучу других методов, в которых я замещают команду заявление с этим, например

task[0] = 'cd vssl/make/; make clean;' 

Это только одна ошибка линии, другие линии говорят, та же ошибка Но каждый раз, когда я получаю те же ошибки, говорящие

./install_everything.sh: line 4: task[0]: command not found 

Что именно я делаю неправильно здесь? Я попытался просто подставив фактическую команду вместо переменных, как этот

#!/bin/bash 

cd vssl/make/ 
make clean 
if(make all); then 
    cd ../../web/make/ 
    make clean 
    if(make install); then 
     echo "ALL DONE" 
    else 
     echo "We failed at web install" 
    fi 
else 
    echo "We failed at vssl install" 
fi 

И это сработало отлично. Поэтому я совершенно не понимаю, почему мой первый метод не работает.

ответ

3

Удалить пространство:

task[0] = $(cd vssl/make/; make clean;) 
    ^^ 
+0

Ого, спасибо так много, что работал. В чем разница между пространством и пространством? – Quillion

+1

@Quillion, это основной синтаксис оболочки. Команды и аргументы разделяются пробелом, поэтому, когда оболочка видит 'var = value', она ищет команду' var', передавая ей 2 аргумента. Назначение переменной должно быть «var = value». Это больно читаемости, но так оно и есть. –

Смежные вопросы