Поскольку "cat file | while read line ..." запускает тело "while" в Переменные подоболочки и оболочки не будут видны за пределами подоболочки, но «пока читается строка; делать ...; done <<(команда)» запускает их в той же оболочке.
Вот мой тестовый файл:
$ cat fruits.txt
apple
cherry
pear
plum
Посмотрите разницу между двумя сценариями и их результатами:
$ cat a.sh
#!/bin/bash
FOUND=0
while read fruit ; do
case $fruit in
cherry)
echo yay, cherry found
FOUND=1
;;
esac
done < <(cat fruits.txt)
echo cherry found: $FOUND
$ ./a.sh
yay, cherry found
cherry found: 1
но
$ cat b.sh
#!/bin/bash
FOUND=0
cat fruits.txt | while read fruit ; do
case $fruit in
cherry)
echo yay, cherry found
FOUND=1
;;
esac
done
echo cherry found: $FOUND
$ ./b.sh
yay, cherry found
cherry found: 0
Вероятно, вам нужны virt-install
и virsh
. Первые могут устанавливать виртуальные машины из командной строки, а вторые могут использоваться для отправки команд в libvirt как adhoc, так и в виде оболочки