GNU Parallel с проверкой оболочки на несколько файлов

Как использовать GNU Parallel для запуска shellcheck на всех *.sh с помощью функции-оболочки?

Эта попытка имеет правильные целевые файлы, но Parallel, кажется, борется с подоболочкой.

lint:sh() {
  local output
  targets=$(find . -name '*.sh' -exec echo {} \;)
  output=$(parallel --no-notice shellcheck ::: "$targets")
  results $? "$output"
}

2 ответа

Используйте следующий подход:

lint:sh() {
  local output
  output=$(find . -name "*.sh" -print0 | parallel -q0 --no-notice shellcheck)
  ...
}

Из -за различных недостатков в bash самый безопасный способ может быть

targets=()
while read -r -d '' file; [[ $file ]]; do
    targets+=("$file");
done < <(find . -name '*.sh' -print0)

Также из-за targets тип был изменен на массив

output=$(parallel --no-notice shellcheck ::: "${targets[@]}")
Другие вопросы по тегам