Как отключить устройство от пути, скрытого другим подключенным устройством?

Без вызова внешней утилиты для каждой созданной строки:

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
2
22.07.2019, 18:41
1 ответ

Если у вас еще не включено распространение монтирования, т.е. согласно настройкам 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дизассемблирует и отсоединяет дерево монтирования, и каждая независимая файловая система закрывается, как только в ней нет открытых файлов.

1
27.01.2020, 22:16

Теги

Похожие вопросы