Как передать переменные в bash

Всем доброго времени. У меня небольшой опыт в bash, но я прочитал все что нашел, прежде чем написать сюда. У меня есть текстовый файл со строками:

disk1
disk2
disk3

Этот файл - результат команды:

disk list | awk -F"|" '/backup/ {print $3}' | sed s/' '//g > backupdisks.txt

Если получится от него отказаться, и вывод команды и сразу преобразовывать вывод команды в переменные, будет еще круче. Количество строк будет меняться время от времени. Мне нужно в скрипте bash взять эти строки и вставить в команду

snapshot create --name ${disk}-$now --disk-name ${disk}

Я не понимаю как импортировать каждую строку в переменную disk1 , disk2... чтобы потом также подставить их во вторую команду. я прочитал и попробовал

while read -r disk
do
    echo "${disk}"
done <  backupdisks.txt
_________________________
read var2 var3 <backupdisks.txt

echo "var2 = $var2 var3 = $var3"
________________________
file=backupdisks.txt
while IFS= read -r line
do
        # echo line is stored in $line
    echo $line
done < "$file"
________________________

Наверное я никак не могу понять как это работает.

Кажется я начинаю понимать, как это работает. Я вставлю сюда весь скрипт, потому что он может пригодиться всем, кто работает в Яндекс Облаке (там нет штатного функционала((( )

Пытаюсь сделать трехдневные бэкапы всех дисков, которые начинаются с "backup-" и вот что у меня получилось и работает:

#!/bin/sh
getDate() {
    date '+%d%m%Y'
}
getDate1() {
    date '+%d%m%Y' --date='3 days ago'
}
now=$(getDate)
del=$(getDate1)


for disk in `yc compute disk list | awk -F"|" '/backup-/ {print $3}' | sed s/' '//g`
do
    (
        yc compute snapshot create --name ${disk}-$now --disk-name ${disk} &&\
        yc compute snapshot delete --name ${disk}-$del
    ) & disown
done




Ответы (1 шт):

Автор решения: ipatev_nn

Давайте начнем с того, что на данном этапе не понятно разделение на 2 цикла, ничего же не мешает в один цикл поместить:

#!/bin/bash
#Выполнение программы date можно сразу записать в переменную
logdir=/var/log/bacup_disk
now=$(date '+%d%m%Y')
del=$(date '+%d%m%Y' --date='3 days ago')
mkdir -p "${logdir}"

for disk in `yc compute disk list | awk -F"|" '/backup/ {print $3}' | sed s/' '//g`
do
    (
#___^_____________subshell(начало)####
        yc compute snapshot create --name ${disk}-$now --disk-name ${disk} &&\
        yc compute snapshot delete --name ${disk}-$del
    ) >> ${logdir}/${disk}.log 2>&1 & disown
#___^_______________________________^^^^^^^^_закрываем subshell, отвязываем от текущей сессии пользователя
#_____^^_^^^^^^^^^^^^^^^^^^^^^^^^^^________перенаправляем потоки stdout и stderr в лог файл, с именем диска
# Теперь набор команды будет запускаться параллельно, но очередность выполнения будет соблюдена
# Если запускать в терминале, то вывод в консоль будет происходить от всех потоков
# Поэтому есть смысл в перенаправлении потоков stdout, stderr в отдельный лог для каждого диска
# && - в конструкции команд, запускает следующую за ней команду в случае успешного выполнения предыдущей
done
→ Ссылка