2010-10-06 4 views
6

Я пишу скрипт, который выглядит следующим образом:Мой сценарий оболочки останавливается после Exec

for i in $ACTIONS_DIR/* 
    do 
      if [ -x $i ]; then 
        exec $i nap 
      fi 
    done 

Теперь, что я пытаюсь добиться, чтобы перечислить все файлы в $ ACTIONS_DIR, чтобы быть в состоянии выполнить Это. Каждый файл под $ ACTIONS_DIR является другим сценарием оболочки.

Теперь проблема заключается в том, что после использования exec сценарий останавливается и не переходит к следующему файлу в строке. Любые идеи, почему это возможно?

ответ

5

exec заменяет процесс оболочки. Удалите его, если вы хотите только вызывать команду как подпроцесс.

3

exec передает управление PID программе, которую вы выполняете. Это в основном используется в сценариях, единственной целью которых является настройка параметров этой программы. Как только exec попал в цель, ничего не выполняется под скриптом.

Кроме того, вы должны попробовать некоторые методы, цитируя:

for i in $ACTIONS_DIR/* 
    do 
     if [ -x "$i" ]; then 
       "./$i" nap 
     fi 
done 

Вы также можете посмотреть в использовании find(1) для этой операции:

find $ACTIONS_DIR \ 
    -maxdepth 1 \ 
    -type f \ 
    -perm +0111 \ 
    -exec {} nap \; 
+1

'для г в«$ ACTIONS_DIR»/ *' будет немного безопаснее, если мы не знаем, имя каталога не содержит пробелов (или, если мы не знаем,/контролировать значение 'IFS'). –

1

exec никогда не возвращается к вызывающему абоненту. Просто попробуйте

 if [ -x $i ]; then 
       ./$i nap 
     fi 
+0

'' $ i "', или у вас будет неправильное поведение, если имя программы содержит пробелы. –

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