LINUX.ORG.RU
решено ФорумAdmin

mc.menu & tar & gzip проблема с русской буквой эс

 , ,


0

2

Добрый день!

Столкнулся с проблемой на ровном месте. Добавил в меню mc блок для выполнения архивации текущего/отмеченных файлов в текущий путь на второй панели (добавил вывод инфы для отладки).

x       [targz] Compress selected/current file to other panel
        echo "Compress to: %D"
        if [ "%t"x = x ]; then
            Name=`echo %D/%f.tar.gz`
            echo "DBG: File: `echo %D/%f.tar.gz` [$Name]"
            echo "DBG: tar cf - %f | gzip -f9 > $Name"
            tar cf - %f | gzip -f9 > $Name
        else
            Name=`basename %d /`
            if [ "$Name" = "/" ]; then Name="root"; fi
            echo "Files: %t"
            tar cf - %t | gzip -f9 > "`echo %D/$Name.tar.gz`"
        fi

Если на неактивной панели в текущем пути есть хотя бы одна русская буква «эс» (нижний регистр), то выдаст ошибку:
Compress to: /home/lex/Загрузки/спб
DBG: File: /home/lex/Загрузки/спб/1.doc.tar.gz [/home/lex/Загрузки/спб/1.doc.tar.gz]
DBG: tar cf - 1.doc | gzip -f9 > /home/lex/Загрузки/спб/
/tmp/mc-lex/mcusrFBU1VW: 13: cannot create /home/lex/Загрузки/�пб/1.doc.tar.gz: Directory nonexistent
tar: -: Функция write завершилась с ошибкой: Обрыв канала
tar: Error is not recoverable: exiting now
ТЗ_БТИ.doc.tar.gz
Видно, что меняет букву эс на какой-то неотображаемый символ. Если в пути нет русской эс - всё отлично отрабатывает. Причём, что интересно, если дать ту же команду из консоли:
$ tar cf - 1.doc | gzip -f9 > /home/lex/Загрузки/спб/
То также отработает нормально. Но зайти в архив из mc не получится по той же причине, хотя он абсолютно рабочий!
/bin/sh: cannot open /home/lex/Загрузки/�пб/1.doc.tar.gz: No such file
Невозможно открыть архив tar /home/lex/Загрузки/спб/1.doc.tar.gz/ugz://

Debian6 3.2.41-2~bpo60+1 x86_64 GNU Midnight Commander, версия 4.8.8 tar (GNU tar) 1.23 gzip 1.3.12



Последнее исправление: CYB3R (всего исправлений: 2)

Ты обнаружил очередной баг с поддержкой юникодных строк. Можешь отловить /tmp/mc-lex/mcusrFBU1VW (временный файл со скриптом, который запускает mc)?

зайти в архив из mc не получится

«Заход» тоже скрипт запускает.

baka-kun ★★★★★
()
Ответ на: комментарий от baka-kun

Сейчас гляну. Вообще удивительно, что на это ещё никто не напоролся.

sptim
() автор топика
Ответ на: комментарий от baka-kun

Пришлось исходники патчить. Вот такой вот временный скрипт при попытке запаковать:

#! /bin/sh
echo "Compress to: /home/lex/Загрузки/0спб"
if [ ""x = x ]; then
Name=`echo /home/lex/Загрузки/0спб/1.doc.tar.gz`
echo "File: ТЗ_БТИ.doc  (`echo /home/lex/Загрузки/0спб/1.doc.tar.gz`) [$Name]"
tar cf - 1.doc | gzip -f9 > $Name
echo "tar cf - 1.doc | gzip -f9 > $Name"
else
Name=`basename /home/lex /`
if [ "$Name" = "/" ]; then Name="root"; fi
echo "Files: "
tar cf -  | gzip -f9 > "`echo /home/lex/Загрузки/0спб/$Name.tar.gz`"
fi
Как видим - всё вполне адекватно.

sptim
() автор топика
Ответ на: комментарий от sptim

Всё дело в шелле, sh у меня это dash 0.5.5.1-7.4. Попробовал изменить на bash - всё заработало. Мдя. На чём тему можно считать закрытой - смотреть код шелла уже времени нет - проще ссылку sh на баш кинуть.

sptim
() автор топика
Ответ на: комментарий от baka-kun

Да без разницы. Это я просто другой каталог создал. Главное, чтобы была буква «с» русская в абсолютно любом месте пути куда будет ложиться архив.

sptim
() автор топика
Ответ на: комментарий от sptim

Да без разницы. Это я просто другой каталог создал.

Ok. Я уж испугался, что глюк в mc, и это он туда что-то понаписал, а ты не заметил сразу. :)

Всё дело в шелле

Собственно, кандидатуры две и было: mc или шелл. Отправь им багрепорт.

baka-kun ★★★★★
()
Ответ на: комментарий от baka-kun

Если есть желание - напиши, я, к сожалению, не особо силён в английском. Исходники dash глянул - навскидку не скажешь - отлаживать надо (имхо - авторы гораздо легче с этой задачей справятся).

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