I tried remounting but always rights (RO or RW) propagate automatically between separate mountpoints.
Если вы прочитаете очень длинную документацию вman mount
(или продолжите поиск «только для чтения -» ), вы поймете, что это неверно при использовании монтирования с привязкой.
Чтобы изменить статус отдельной точки монтирования «(Запись VFS )», в отличие от «исходного суперблока файловой системы», вы должны перемонтировать ее с включенной опцией bind
.
Я очень рад сообщить, что это сработало для меня, независимо от того, была ли исходная точка монтирования создана с использованиемbind
.
Я предлагаю следующую последовательность.
mount -oremount,bind,ro /
mount -oremount,rw /
mount -o bind,rw / /mnt/rootfs
# OR - this should have the same effect as the last command
mount -t ubifs -o rw /dev/ubi0_1 /mnt/rootfs
findmnt
покажет общее, эффективное состояние-ro
илиrw
-каждой точки монтирования в отдельности.
Немного глупо получать список mp3-файлов, передавать их в echo
, чтобы он мог распечатать их, разделенные пробелами, затем передавать этот вывод по каналу, читать его, разделять на пробел/табуляцию/новую строку/NUL, а затем присоединиться к |
.
Либо делай:
printf '%s|' *.mp3
Или
files=(*.mp3)
joined=${(j:|:)files}
Если цель состоит в том, чтобы использовать его в качестве шаблона zsh
, вы, вероятно, захотите экранировать подстановочные знаки в именах этих файлов. Это делается с помощью флага раскрытия параметра b
:
pattern="(${(j:|:)${(b@)files}})"
Я нашел один способ сделать это, но он все еще довольно запутан для такого простого варианта использования:
echo ${(j:|:)"${(@f)$(print -l *.mp3)}"}
Вы можете использовать set
, чтобы объединить эти файлы в позиционные параметры, а затем "$*"
, чтобы расширить их с помощью желаемого разделителя полей:
set -- *.mp3
(IFS=\|; echo "$*")
Обратите внимание, что это делается в подоболочке, поэтому изменения в IFS не влияют на вашу текущую оболочку.