Без вызова внешней утилиты для каждой созданной строки:
read template <file
paste <(seq 1 3) <(seq 5 7) |
while read x y; do
t=${template/HAHA/$x}
t=${t/HOHO/$y}
printf '%s\n' "$t"
done >new.txt
Это сначала читает строку из файла с именем file
в $template
. Затем он строит ввод из двух столбцов -для цикла while read
. Входными данными для цикла являются два столбца чисел из seq
.
В цикле выполняются некоторыеbash
-специфические замены значения $template
для замены строк HAHA
и HOHO
числами, считанными из paste
. Это создает $t
, который затем выводится.
Используя только awk
и предполагая, что ввод представляет собой только одну строку:
awk '{
for (i = 1; i <= 3; ++i) {
t = $0;
sub("HAHA", i, t)
sub("HOHO", 4+i, t)
print t
}
}' file
Цикл оболочки для bash
, имитирующий код awk
выше:
read template <file
for (( i = 1; i <= 3; ++i )); do
t=${template/HAHA/$i}
t=${t/HOHO/$((i+4))}
printf '%s\n' "$t"
done
Если у вас еще не включено распространение монтирования, т.е. согласно настройкам systemd по умолчанию, сначала запустите это:
mount --make-rshared /
Тогда:
mkdir /root.orig
mount --rbind / /root.orig
mount --make-rprivate /root.orig/mnt
mount newdevice /mnt
...
umount -R /root.orig/mnt # instead of umount olddevice
Затем безопасно разберите магию -, стараясь не размонтировать всю систему:
mount --make-rprivate /root.orig
umount -l /root.orig
rmdir /root.orig
Обычно мне нравится использовать рекурсивные варианты команд mount
/ umount
. Вы говорите, что начали только с одной файловой системы, смонтированной под /mnt
. В приведенной выше последовательности я использовал umount -R /root.orig/mnt
. Если бы также была файловая система, смонтированная в каталоге sub каталога /mnt
, эта команда umount -R
могла бы завершиться ошибкой на половине пути -. т.е. потому что на подмаунте нет открытых файлов, а на основном монтировании есть открытые файлы.ИМО, это похоже на то, как работает umount -l
. umount -l /path
дизассемблирует и отсоединяет дерево монтирования, и каждая независимая файловая система закрывается, как только в ней нет открытых файлов.