2013-11-25 3 views
0

Я пытаюсь выполнить команду после выполнения сценария оболочки. После кода, что я пытался до сих пор:Выполнение команды после завершения Shell Script

#! /bin/bash 
exec >> /tmp/foo.log 

#$REPO and $AUTHOR are environmental varibles 
echo "test" >> /tmp/foo.log 
echo $REPO >> /tmp/foo.log 
echo $AUTHOR >> /tmp/foo.log 

exit 0 

cd /var/www/html/websvn 
php remove_commits.php $REPO $AUTHOR 

Данный скрипт не работает по какой-то причине. Как я могу это исправить? Нужна ваша помощь.

+0

Что вы пытаетесь сделать с помощью инструкции exec наверху? Вы не сказали, что выполнить. Кроме того, когда вы запустите exit 0, оболочка выйдет; более поздние команды не будут выполняться. – Vitruvius

+1

@Saposhiente в этом случае, «cat >> /tmp/foo.log» не выполняется для какой-либо программы. он перенаправляет все stdout на /tmp/foo.log. поэтому другие три «>>/tmp/foo.log» не нужны. –

+0

(«Кошка» в предыдущем комментарии, очевидно, должна быть 'exec'.) – tripleee

ответ

3

Предполагая, что вы хотите выполнить команду cd и скрипт php, вам нужно будет удалить exit 0. Это завершает сценарий.

+0

Как выполнить команду cd и скрипт php после успешного выполнения команд над ним? Мне нужно создать еще один скрипт оболочки и добавить команду cd и php-скрипт? –

+0

Как подчеркнуто подчеркнув, проверьте exec >> /tmp/foo.log. В частности, что вы думаете, что должно делать? Подсказка: удалите эту строку и посмотрите, не устранит ли это вашу проблему. – MichaelMilom

+0

Как вы думаете, что команды 'echo' могут выйти из строя? В любом случае, добавление 'set -e' в начало скрипта заставит его закончить в случае ошибки. – tripleee

0

ниже код запускает php после того, как foo.sh успешно.

$ ./foo.sh && (cd /var/www/html/websvn; php remove_commits.php $REPO $AUTHOR) 

exec >> /tmp/foo.log это редирект всего выход следующей команды /tmp/foo.log. а не для команды выполнения. см. http://wiki.bash-hackers.org/commands/builtin/exec

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