Чтобы сделать это буквально, вам, вероятно, придется прибегнуть к eval:
function subst_all_filenames() {
subst="$1"
for filename in *
do
eval 'echo ${filename'"$subst"'}'
done
}
subst_all_filenames "^^"
subst_all_filenames ",,"
subst_all_filenames ""
В качестве альтернативы можно поддерживать только известный список замен:
function subst_all_filenames() {
case "$1" in
^^) for filename in *; do echo "${filename^^}"; done ;;
,,) for filename in *; do echo "${filename,,}"; done ;;
*) printf "%s\n" * ;;
esac
}
Иногда такая вспомогательная функция вообще не нужна. Вполне нормально иметь такие циклы повсюду в сценарии оболочки.
Ваша команда lvreduce
была бы правильной , если бы можно было в строке -сжать вашу файловую систему.
К сожалению, файловые системы ext4/ext3/ext2 могут быть расширены, но не сокращены только в строке -.
Протестировано на Debian, но даже примечания к выпуску самого последнего e2fsprogs
исходного пакета не указывают на то, что это вообще изменилось.
# lvcreate -L 8g -n lvtest vgsys
# mkfs.ext4 /dev/vgsys/lvtest
# mount /dev/vgsys/lvtest /mnt
# lvreduce --resizefs -L 4G /dev/vgsys/lvtest
Do you want to unmount "/mnt" ? [Y|n] n
fsadm: Cannot proceed with mounted filesystem "/mnt".
/sbin/fsadm failed: 1
Filesystem resize failed.
Этот ответ описывает процедуру, которая позволяет избежать перезагрузки, но все же требует перехода к временной корневой файловой системе на основеtmpfs
-для сжатия реальной корневой файловой системы.