Извлеките подмассив, используя выделенный символ строки # в bash

У меня есть несколько командных строк, которые хранятся в текстовом файле, и я разделил их на разные группы, используя выделенный символ строки, скажем, #step1 для первой группы, #step2 для второй группы и т. Д. У меня вопрос, как я могу извлечь каждую группу и выполнить каждую командную строку, используя # step * в качестве входного аргумента.

текстовый файл шагов:

#step1
command line 1
command line 2
command line 3
...
#step2
command line 4
command line 5
command line 6
...

Как создать функцию где-то в моем контексте кода, которая может сделать что-то вроде:

execSteps "#step1"

или есть другой способ организовать мои шаги текстового файла?

Есть идеи?

Большое спасибо!

2 ответа

Решение

Один подход:

getSteps() {
  local running=0
  while read -r line; do
    if (( running )); then
      if [[ $line = "#"* ]]; then
        return
      else
        printf '%s\n' "$line"
      fi
    else
      [[ $line = "#"$1 ]] && running=1
    fi
  done <stepFile
}

execSteps() {
  getSteps "$@" | sh -
}

Затем вы можете распечатать код для шага, запустив getSteps step1или выполнить этот код с execSteps step1,

Похоже, вы просто хотите определить "модуль" оболочки. Сохранить как mymodule:

step1 () {
    command line 1
    command line 2
    command line 3
}

step2 () {
    command line 4
    command line 5
    command line 6
}

Чтобы использовать его, просто получите его из скрипта и вызовите нужную функцию

. mymodule
# Run step 1
step1

# Run step 2
Другие вопросы по тегам