The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Транслитерация из-под cron"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Транслитерация из-под cron"  –1 +/
Сообщение от Azar1K (ok) on 04-Ноя-14, 12:38 
Есть скрипт для транслитерации:

#!/bin/bash

shopt -s nullglob

for NAME in /home/samba/fileserver/public/* ; do
  TRS=`echo $NAME | sed "y/абвгґдеёжзиыійклмнопрстуфц/abvhgdeegzyyijklmnoprstufc/"`
  TRS=`echo $TRS | sed "y/АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYYIJKLMNOPRSTUFC/"`
  TRS=${TRS//ї/ji}; TRS=${TRS//Ї/JI}
  TRS=${TRS//є/ye}; TRS=${TRS//Є/YE}
  TRS=${TRS//ж/zh}; TRS=${TRS//Ж/ZH}
  TRS=${TRS//ч/ch}; TRS=${TRS//Ч/CH}
  TRS=${TRS//х/kh}; TRS=${TRS//Х/KH}
  TRS=${TRS//ш/sh}; TRS=${TRS//Ш/SH}
  TRS=${TRS//щ/sch}; TRS=${TRS//Щ/SCH}
  TRS=${TRS//ю/yu}; TRS=${TRS//Ю/YU}
  TRS=${TRS//я/ya}; TRS=${TRS//Я/YA}
  TRS=${TRS//э/ye}; TRS=${TRS//Э/YE}
  TRS=${TRS//ъ/}; TRS=${TRS//Ъ/}
  TRS=${TRS//ь/}; TRS=${TRS//Ь/}
  TRS=${TRS//\ /_}; TRS=${TRS//\"/}
  TRS=${TRS//\:/}; TRS=${TRS//\;/}
  TRS=${TRS//\!/}; TRS=${TRS//\?/}
  TRS=${TRS//\@/}; TRS=${TRS//\$/}
  TRS=${TRS//\%/}; TRS=${TRS//\^/}
  TRS=${TRS//\~/}; TRS=${TRS//\*/}
  if [[ `file -b "$NAME"` == directory ]]; then
    mv -v "$NAME" "$TRS"
    cd "$TRS"
    "$0"
    cd ..
  else
    mv -v "$NAME" "$TRS"
  fi
done

cron на Debian wheezy без проблем его отрабатывает
cron на Debian etch не может отработать.
cron на последнем cygwin под Win7 аналогично etch. Логи при этом следующие:

sed: -e expression #1, char 82: strings for `y' command are different lengths
sed: -e expression #1, char 82: strings for `y' command are different lengths
'/cygdrive/c/Test/\320\256    \320\257   \320\255    \321\227' -> ''
mv: cannot move '/cygdrive/c/Test/\320\256    \320\257   \320\255    \321\227' to '': No such file or directory

Крон выглядит так (cygwin):

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.PmvD1zZzC7 installed on Tue Nov  4 10:57:51 2014)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
PATH=/usr/local/bin:/usr/bin:/bin:$PATH
*/1 * * * * /bin/bash /cygdrive/c/Tasks/Translit.sh

Пока в качестве костыля под cygwin пользую из виндового шедулера:

C:\cygwin\bin\bash.exe -l -c "/cygdrive/c/Tasks/Translit.sh"

Вручную скрипт отрабатывает без проблем.
Есть подозрения на то, что крон не понимает переменные $NAME и $TRS
Как обойти сию проблему?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Транслитерация из-под cron"  +/
Сообщение от Z0termaNN (ok) on 05-Ноя-14, 16:41 
зачем транслитерировать последовательности различной длинны ?
так подойдет ?

for NAME in /tmp/a.temp/* ; do
  TRS=`echo $NAME | sed \
  '{
   y/абвгґдеёжзиыійклмнопрстуфц/abvhgdeegzyyijklmnoprstufc/
   y/АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYYIJKLMNOPRSTUFC/
   s/ї/ji/g
   s/Ї/JI/g
   s/є/ye/g
   s/Є/YE/g

...........
  }'`

и да, локаль тоже нелишне в скрипте выставить.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Транслитерация из-под cron"  +/
Сообщение от Azar1K (ok) on 06-Ноя-14, 16:24 
> последовательности различной длинны ?

Как понимать?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "Транслитерация из-под cron"  +/
Сообщение от pavlinux (ok) on 06-Ноя-14, 13:47 
> Как обойти сию проблему?

Самбу настроить.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Транслитерация из-под cron"  +/
Сообщение от Azar1K (ok) on 06-Ноя-14, 16:25 
>> Как обойти сию проблему?
> Самбу настроить.

Каким боком  к данному вопросу относится самба?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

7. "Транслитерация из-под cron"  +/
Сообщение от pavlinux (ok) on 07-Ноя-14, 01:51 
> Каким боком  к данному вопросу относится самба?

Оу, даже так. Ну тогда расскажи пожалуйста, для чего нужен этот скрипт?! :D
Что делает - я вижу, транслитерацию, а вот для чего?

> cron на Debian wheezy без проблем его отрабатывает

Даже вроде работал.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

10. "Транслитерация из-под cron"  +/
Сообщение от Azar1K (ok) on 07-Ноя-14, 11:48 
> Даже вроде работал.

?! =)

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

11. "Транслитерация из-под cron"  +/
Сообщение от Azar1K (ok) on 07-Ноя-14, 11:50 
>> Каким боком  к данному вопросу относится самба?
> Оу, даже так. Ну тогда расскажи пожалуйста, для чего нужен этот скрипт?!
> Что делает - я вижу, транслитерацию, а вот для чего?

У меня самба везде одинаково настроена (как на новых, так и на старых серверах). ЮЮЦП вполне себе может работать и без самбы и никак оба этих пакета один от другого не зависят. Если бы в путях не указал самбу, то вы бы  и не знали, что там она используется.
Если есть конкретные предложения, то пишите, а писать о каких-то сферических настройках линукса в целом не надо. Я сам знаю, что где-то что-то надо настроить, потому и спросил здесь, ЧТО и ГДЕ именно!

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

18. "Транслитерация из-под cron"  +/
Сообщение от pavlinux (ok) on 08-Ноя-14, 02:33 
> Я сам знаю, что где-то что-то надо настроить, потому и спросил здесь, ЧТО и ГДЕ именно!

О да, великий гуру! Даже, пля, локаль в системе, иль хотя бы в скрипте настроить них...я не умеем, а уже пальцы гнём. :D

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

5. "Транслитерация из-под cron"  +/
Сообщение от DiJey email(ok) on 06-Ноя-14, 19:57 
Раз дело в кроне, (в  ручную запускается) я тоже думаю дело в переменных: $NAME $TRS

крону не передаются эти переменные, для того что бы передавались их нужно в общих дефолтных настройках экспортировать


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Транслитерация из-под cron"  +/
Сообщение от Azar1K (ok) on 06-Ноя-14, 21:05 
> в общих дефолтных настройках экспортировать

У меня подобная проблема была со скриптом проверки температуры дисков утилитой hddtemp. Вручную отрабатывался, а кроном никак. Решил проблему явным указанием пути к бинаринку (whereis):
/usr/sbin/hddtemp
Здесь несколько иная переменная и мне не совсем понятно как правильно ее явно указать.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

9. "Транслитерация из-под cron"  +/
Сообщение от pavlinux (ok) on 07-Ноя-14, 02:03 
:)

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

12. "Транслитерация из-под cron"  +/
Сообщение от DiJey email(ok) on 07-Ноя-14, 14:18 
>> в общих дефолтных настройках экспортировать
> У меня подобная проблема была со скриптом проверки температуры дисков утилитой hddtemp.
> Вручную отрабатывался, а кроном никак. Решил проблему явным указанием пути к
> бинаринку (whereis):
> /usr/sbin/hddtemp
> Здесь несколько иная переменная и мне не совсем понятно как правильно ее
> явно указать.

если в ручную скрипт запускается, значит в профиле у тебя эти переменные уже прописаны, выполни комманды:
env | grep TRS
env | grep NAME

тебе эти переменные нужно прописать в общем профиле, и что бы пути постоянно не прописывать посмотри на тех серверах где не прописываешь и настрой переменную PATH, тоже в общем профиле.
Прописывать нужно примерно в файлах /etc/bashrc /etc/profile более точно тебе виднее зависит от того какая система, какой шел используешь

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

13. "Транслитерация из-под cron"  +/
Сообщение от Azar1K (ok) on 07-Ноя-14, 16:23 
У меня нет этих переменных где-то конкретно прописанных. Грепнуть тоже не удается, потому как ничего нет. Разве что NAME выдает всевозможные ненужные результаты
env | grep NAME
USERNAME=root
LOGNAME=root
Ну а система Debian wheezy, bash 4.2

P.S.
В принципе этих переменных и не должно негде быть прописано, иначе любые скрипты со своими переменными со временем напрочь бы захламили систему под корень. Переменная создается исключительно на время выполнения скрипта

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Транслитерация из-под cron"  +/
Сообщение от DiJey email(ok) on 07-Ноя-14, 16:43 
> sed: -e expression #1, char 82: strings for `y' command are different lengths
> /АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYYIJKLMNOPRSTUFC/"`
>В левой половине мультибайтные символы (57 байт), справа однобайтные ASCII (23 байта) И как >тебе компьютер должен сопоставить массивы разной длины?

Тебе верно написали. NAME и TR у тебя в самом скрипте определяются вот их и нет в env.

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

8. "Транслитерация из-под cron"  +/
Сообщение от pavlinux (ok) on 07-Ноя-14, 01:52 
:)
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

15. "Транслитерация из-под cron"  +/
Сообщение от DiJey email(ok) on 07-Ноя-14, 16:44 
> :)

Как сообщение пишешь, что бы только в почту падало, тут не отображалось? :)

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

16. "Транслитерация из-под cron"  +/
Сообщение от тень_pavel_simple on 07-Ноя-14, 16:46 
> :)

Ты же кажись как-то такой же хернёй занимался, у пациента неверная кодировка файла и/или лэнг криво выставлен?

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

17. "Транслитерация из-под cron"  +/
Сообщение от pavlinux (ok) on 08-Ноя-14, 02:15 
>> :)
> Ты же кажись как-то такой же хернёй занимался

http://www.opennet.ru/openforum/vsluhforumID9/9656.html

> у пациента неверная кодировка файла и/или лэнг криво выставлен?

поциента пытается сравнить два массива разной длины.
в одной 4-байтные символы, в другой обычный ASCII  

$ echo -n "АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ" | wc -c
52
$ echo -n "ABVHGDEEGZYYIJKLMNOPRSTUFC" | wc -c
26

$ echo -n "АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ" | od -x
0000000 90d0 91d0 92d0 93d0 90d2 94d0 95d0 81d0
0000020 96d0 97d0 98d0 abd0 86d0 99d0 9ad0 9bd0
0000040 9cd0 9dd0 9ed0 9fd0 a0d0 a1d0 a2d0 a3d0
0000060 a4d0 a6d0
0000064
$ echo -n "ABVHGDEEGZYYIJKLMNOPRSTUFC" | od -x
0000000 4241 4856 4447 4545 5a47 5959 4a49 4c4b
0000020 4e4d 504f 5352 5554 4346
0000032
---

$ export LC_ALL=ru_RU.UTF-8;
$ echo ФВЫАФЫВАРОППРТШЬШКЦЙЦВЦ | sed "y/АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYYIJKLMNOPRSTUFC/"
FVYAFYVAROPPRTШЬШKCJCVC

$ export LC_ALL=C
$ echo ФВЫАФЫВАРОППРТШЬШКЦЙЦВЦ | sed "y/АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYY
sed: -e expression #1, char 82: strings for `y' command are different lengths

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

19. "Транслитерация из-под cron"  +/
Сообщение от Azar1K (ok) on 13-Ноя-14, 15:17 
> в одной 4-байтные символы, в другой обычный ASCII

Это верно, но ваша демонстрация:

> $ export LC_ALL=ru_RU.UTF-8;
> $ echo ФВЫАФЫВАРОППРТШЬШКЦЙЦВЦ | sed "y/АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYYIJKLMNOPRSTUFC/"
> FVYAFYVAROPPRTШЬШKCJCVC
> $ export LC_ALL=C
> $ echo ФВЫАФЫВАРОППРТШЬШКЦЙЦВЦ | sed "y/АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYY
> sed: -e expression #1, char 82: strings for `y' command are different
> lengths

Вы сами намеренно обрезали количество входных символов замены для того, что бы якобы продемонстрировать проблему кодировки локали. Естественно, что оно даже без крона выдаст ошибку. И LC_ALL в данном конкретном случае здесь ни при чем.
АБВГ надо сравнивать с ABVH, а не с AB (!)

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

20. "Транслитерация из-под cron"  +/
Сообщение от тень_pavel_simple on 13-Ноя-14, 18:12 
>[оверквотинг удален]
>> FVYAFYVAROPPRTШЬШKCJCVC
>> $ export LC_ALL=C
>> $ echo ФВЫАФЫВАРОППРТШЬШКЦЙЦВЦ | sed "y/АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYY
>> sed: -e expression #1, char 82: strings for `y' command are different
>> lengths
> Вы сами намеренно обрезали количество входных символов замены для того, что бы
> якобы продемонстрировать проблему кодировки локали. Естественно, что оно даже без крона
> выдаст ошибку. И LC_ALL в данном конкретном случае здесь ни при
> чем.
> АБВГ надо сравнивать с ABVH, а не с AB (!)

Странные вы, вопрошающие, мало того что сами найти ошибку не в состоянии, так ещё завидное упорство проявляете в своих заблуждениях.

Свободен.следующий.

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

22. "Транслитерация из-под cron"  +/
Сообщение от Azar1K (ok) on 14-Ноя-14, 00:00 
> сами найти ошибку не в состоянии

Если задать вопрос на американском форуме, вам ответят. Если задать вопрос на израильском форуме, вам зададут встречный вопрос. Если задать вопрос на русском форуме, вам будут долго объяснять, какой вы мудак.

Этот топик – отличная иллюстрация выше изложенного, а вы – типичный троль, который ничего дельного кроме засорения не написал.
Надо было сразу спросить на stackoverflow. За 1-2 поста был бы ответ, а не как здесь - натролили много букафф бес толку.
Со времени топикстарта перевел последних 2 старых сервера на wheezy и мой первоначальный вариант скрипта отлично работает теперь на всех серверах (без какой либо дополнительной настройки локалей или самбы как неумолимо глупо здесь писал один сказочный персонаж). Только время здесь убил на подкармливание троллей вроде вас, которые сравнивают
АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYY
вместо
АБВГҐДЕЁЖЗИЫІЙКЛМНОПРСТУФЦ/ABVHGDEEGZYYIJKLMNOPRSTUFC
А потом что-то лепят о:
command are different lengths
Ведь понятно даже с количества символов, что будет ошибка.
Впрочем, неважно уже.  Как вы писали:

> Свободен.следующий.

Ухожу с радостью, что больше здесь мне вас, троллей, кормить не придется. Извините, но далее без меня, зовите следующего!

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

24. "Транслитерация из-под cron"  +/
Сообщение от pavlinux (ok) on 14-Ноя-14, 02:20 
>> сами найти ошибку не в состоянии
>
Если задать вопрос на американском форуме, вам ответят. Если задать вопрос на 
> израильском форуме, вам зададут встречный вопрос. Если задать вопрос на русском
> форуме, вам будут долго объяснять, какой вы мудак.

Потому что ты - мудак, тебе даже sed об этом написал:

sed: -e expression #1, char 82: strings for `y' command are different lengths
sed: -e expression #1, char 82: strings for `y' command are different lengths

sed тоже аццкий тролль? идевается над тобой гад.

Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

23. "Транслитерация из-под cron"  +/
Сообщение от pavlinux (ok) on 14-Ноя-14, 02:15 
> Вы сами намеренно обрезали количество входных символов замены для того,
> что бы якобы продемонстрировать проблему кодировки локали.

Да, делать мне больше нех...я, - детешек унижать. С первого сообщения видно что ты лошарик.
Тебя мордой ткули, что ты UTF8 пытаешься в ASCII конвертнуть, потому что локаль кревая.
Нет пля, сопли пузырями, понты качает.

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

21. "Транслитерация из-под cron"  +/
Сообщение от skb7 (ok) on 13-Ноя-14, 20:40 
Correct answer: use English, Luke! :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру