Запуск всех сценариев оболочки в папке

У меня есть много скриптов .sh в одной папке и я хотел бы запускать их один за другим. Один скрипт может выполняться как:

bash wget-some_long_number.sh -H

Предположим, что в моем каталоге есть /dat/dat1/files

Как я могу запустить bash wget-some_long_number.sh -H один за другим?

Я понимаю, что в этой строке должно работать:

for я in *.sh;...do....; done

Ответы

Ответ 1

Использовать этот:

for f in *.sh; do  # or wget-*.sh instead of *.sh
  bash "$f" -H 
done

Если вы хотите остановить все выполнение при сбое скрипта:

for f in *.sh; do
  bash "$f" -H || break  # execute successfully or break
  # Or more explicitly: if this execution fails, then stop the 'for':
  # if ! bash "$f" -H; then break; fi
done

Если вы хотите запустить, например, x1.sh, x2.sh ,..., x10.sh:

for i in 'seq 1 10'; do
  bash "x$i.sh" -H 
done

Ответ 2

существует гораздо более простой способ, вы можете использовать команду run-parts которая будет выполнять все скрипты в папке:

run-parts /path/to/folder

Ответ 3

Я столкнулся с этой проблемой, когда я не мог использовать циклы и работы с cron.

Ответ:

foo () {
    bash -H $1 
    #echo $1
    #cat $1
}
cd /dat/dat1/files #change directory
export -f foo #export foo
parallel foo ::: *.sh #equivalent to putting a & in between each script

Вы используете GNU parallel, это выполняет все в каталоге, с добавленным баффом это происходит намного быстрее. Не говоря уже о том, что это происходит не только с выполнением скрипта, вы можете поместить любую команду в функцию, и она будет работать.