LINUX.ORG.RU

Кодировка файловых систем флешек, флопика и CD/DVD


0

0

В продолжение темы на ветке http://www.linux.org.ru/jump-message.jsp?msgid=3284154&cid=3316090

почему-то не дает писать комментарии.. не пойму в чем дело.

В общем проблема в том что когда вставляю флешку на которой нету метки (пустая) то имя подставляется как NO NAME и при этом монтирование обрывается.
как я понял все дело в том что имя диреткории монтирования содержит пробел (зачем его так кде тулит?).
Вот привожу лог:

Sended to mount:
-t vfat -o nosuid,nodev,flush,uid=1000,noatime,utf8,shortname=lower /dev/sdc1 /media/NO NAME
-t vfat -o nosuid,nodev,flush,uid=1000,noatime,utf8,shortname=lower /dev/sdc1 /media/NO NAME
Removing UTF8:
-t vfat -o nosuid,nodev,flush,uid=1000,noatime,shortname=lower /dev/sdc1 /media/NO NAME
Corrected for CD/DVD/USB(vfat)/FLOPPY:
-t vfat -o nosuid,nodev,flush,uid=1000,noatime,shortname=lower,iocharset=cp1251,codepage=1 251 /dev/sdc1 /media/NO NAME

если же метку прописать - все монтируется на ура с именем метки.
подскажите что поправить в скрипте. на текущий момент он имеет вид:


#!/bin/bash
# Change Additional mount options with IOCHARSET and CODEPAGE you need
# Additional mounting options (cyrillic correction)
default_additional_options=",iocharset=cp1251,codepage=1251"
additional_options_cdrom=",iocharset=cp1251"
log_name="/var/log/mount.log"

echo "Sended to mount:" | tee -a "$log_name"
echo $* | tee -a "$log_name"
echo $* | iconv -f UTF-8 -t cp1251 | tee -a "$log_name"

# Get mount point name
mount_point=`expr "$*" : '.*\(/media/[^ \t\n]*\)'`
# Get try mount point name
try_mount_point=`echo $mount_point | iconv -f UTF-8 -t cp1251`
# Create symlink in /media/ directory
if [ ! "$try_mount_point" == "$mount_point" ] && [ ! -e "$try_mount_point" ];then
ln -s "$mount_point" "$try_mount_point"
fi

# Removing [,]utf8[=true][,]
parameters=`echo $* | sed -r s/"(,utf8(=true)?|utf8(=true)?,)"//`

echo "Removing UTF8:" | tee -a "$log_name"
echo $parameters | tee -a "$log_name"

# Checking if FS type or Mounting Options specified
if ( expr "$parameters" : '.*\(/dev/\(sr\|cdrom\)[[:alnum:]]*\)' > /dev/null ); then
# update mount options for cdrom
parameters=`echo $parameters | sed -r s/"-o [[:alnum:],-_=]*"/\&$additional_options_cdrom/`
elif ( expr "$parameters" : '.*\(/dev/\(fd\|floppy\)[[:alnum:]]*\)' > /dev/null ) || ( expr "$parameters" : '.*\(-t vfat[[:blank:]]\)' > /dev/null ); then
# update mount options for other
parameters=`echo $parameters | sed -r s/"-o [[:alnum:],-_=]*"/\&$default_additional_options/`
fi

echo "Corrected for CD/DVD/USB(vfat)/FLOPPY:" | tee -a "$log_name"
echo $parameters | tee -a "$log_name"

# mount
/bin/mount_true $parameters


# Get mount point name 
mount_point=`expr "$*" : '.*\(/media/[^ \t\n]*\)'`

Попробуй заменить на 

# Get mount point name 
mount_point=\"`expr "$*" : '.*\(/media/[^\t\n]*\)'`\"

anonymous
()

Вставь строку перед 'echo "Corrected for...'

parameters=`echo $parameters | sed -r s/"\/media\/.*$"/\"\&\"/`

Только точка монтирования обязательно должна быть последним аргументом.

AX ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.