Извлеките подмассив, используя выделенный символ строки # в 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