user
опция в fstabЯ думаю, что просто необходимо добавить опцию user
к Вашему /etc/fstab
запись, если Вы хотите, чтобы пользователи смогли смонтировать запись. Например:
/dev/cdrom /cd iso9660 ro,user,noauto,unhide
Также я думаю, что можно достигнуть того, что Вы хотите использовать приложение pmount
.
выборка из страницы справочника
pmount - смонтируйте произвольные заменяемые в горячем режиме устройства как обычного пользователя
Смонтироваться:
$ pmount /dev/sda1 /media/somedir
] Возможно, это самый уродливый Bash-код, который я когда-либо писал, но...[
] [IPv4_first=1.1.1.1
IPv4_second=2.2.2.2
IPv4_third=3.3.3.3
names=(${!IPv4_@})
eval "IPv4_all=(${names[@]/#/$})"
printf "'%s'\n" "${IPv4_all[@]}"
]
[]Смотри, Ма, никакого цикла![
] [][][]${names[@]/#/$}[
] предиктует[] []$[
] к началу каждого элемента массива, сопоставляя пустую строку, привязанную к началу каждого элемента. Это дает массив разыменований переменных, который мы можем развернуть внутри []eval[
], чтобы получить ссылки на переменные внутри инициализатора массива. Это должны быть две отдельные строки, так как нельзя применять несколько расширений параметров одновременно.[
]Вывод:[
] ['1.1.1.1'
'2.2.2.2'
'3.3.3.3'
]
[], как и ожидалось.[
] []Строку можно заменить на:[
] [IPv4_all=($(eval "echo ${names[@]/#/$}"))
]
[]вместо []eval[
]ling для присваивания массива. Не уверен, что это лучше или нет.[
]Если значения переменных могут содержать пробелы или другие символы IFS, вы можете изменить eval:[
] [eval "IPv4_all=($(printf '"$%s" ' "${names[@]}"))"
]
[]Это правильно удвоит все разыменования переменных.[
]. Вам не нужна IPv4_all
переменная:
eval printf "\'%s\'\\\n" $(printf "$%s\n" ${!IPv4_@})
Выход:
'1.1.1.1'
'2.2.2.2'
'3.3.3.3'
Моя конкурсная заявка на самый уродливый/самый запутанный басовый код ;-):
eval 'declare(){ v=${2%%=*};[[ $v = IPv4_* ]]&&IPv4_all+=("${!v}");};'"$(declare -p)"
unset -f declare
Мне кажется, это работает, хотя я соглашусь с тем, что могу упустить какой-то фундаментальный момент:
IPv4_first=1.1.1.1
IPv4_second=2.2.2.2
IPv4_third=3.3.3.3
IPv4_all=( $(set | sed '/IPv4_.*[=)]/!d;s///') )
printf "'%s'\n" "${IPv4_all[@]}"
'1.1.1.1'
'2.2.2.2'
'3.3.3.3'
Это лучше:
eval IPv4_all=( "$(set |
grep -E '^IPv4_[_[:alnum:]]*=([^(]|$)' |
sed 's/\([^=]*\).*/${\1+"$\1"} /')"
)
grep
получает только безопасные линии, которые соответствуют вашей целевой var. sed
окружает их маркерами расширения параметров, поэтому они ничего не оценивают, если на самом деле они не являются текущими именами переменных оболочки.