Я пытаюсь сделать скрипт bash для запуска нескольких скриптов, расположенных в разных каталогах.

Я пытался сделать что-то вроде

#!/bin/bash  

path1="/path/to/folder1"
path2="/path/to/folder2"
command="./script"

command_line="cd $path1 -exec $command {} \; cd $path2 -exec $command {} \;"

echo $command_line
eval $command_line

exit

Но не повезло .. как вы можете себе представить, мои навыки в bash близки к .. 0

1 ответ1

0

2 Основные проблемы с вашим скриптом.

  1. CD не принимает больше параметров. Поэтому оставшаяся часть строки после имени каталога будет проигнорирована (здесь -exec $ command ...)
  2. exec (я не знаю, что означает здесь -exec) будет запускать команду вместо родительского процесса, т. е. ваш основной скрипт будет заменен на, а остальная часть вашего скрипта больше не будет работать.

Каждая команда должна быть такой: «cd $ pathx; $ command». Поскольку вы не хотите, чтобы вас блокировали, вы должны запустить его в фоновом режиме "(cd $ pathx; $ command) &"

Теперь вы хотите сделать это для 20 папок, вы можете запустить цикл, что-то вроде этого:

for p in `cat file-containing-folder-names`
do
  (cd $p; $command) &
done

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .