Насколько я понимаю, вам нужно сравнить некоторый «текст», закодированный в кодовой странице TIS -620(Thai )с кодировкой utf8(универсальной )эквивалентной.
Ну, так как самой универсальной кодировкой (, которая будет кодировать столько символов, сколько UTF -32 )является utf8, то нам следует преобразовать в нее самую локальную кодировку TIS -620.
Обычный инструмент преобразования кодировки —iconv
. С помощью этого инструмента вы можете:
$ printf '\xC1' | iconv -f TIS620 -t utf8
ม
И посмотрите (, если ваш терминал принимает utf8 )символ ม. Символ ม
имеет значение C1
, глядя на таблицу в TIS википедии -620.
Или, чтобы «увидеть» байты, составляющие этот символ (в utf8):
$ printf '\xC1' | iconv -f TIS620 -t utf8 | od -vAn -tx1
e0 b8 a1
Какие 3 байта получаются при кодировании символа с кодовой точкой UnicodeU0E21
из формата файла или также на www.utf8 -chartable.de:
U+0E21 ม e0 b8 a1 THAI CHARACTER MO MA
Список кодировок, доступных для TIS620 в iconv::
$ iconv -l | grep 620
TIS-620//
TIS620-0//
TIS620.2529-1//
TIS620.2533-0//
TIS620//
Выберите тот, который соответствует кодировке ваших имен файлов.
Однако мне не удалось найти умляут ö на тайском языке.
Тайская страница TIS620 Или даже (очень старый)перевод тайского языка в ISO/IEC 10646 -1 :1993 не показывает наличие о с умлаутом в тайском языке.
Не могли бы вы повторно -отредактировать свой вопрос?
Предположим, что консоль/терминал настроен на понимание utf8. И давайте создадим три имени файла в каталоге с разными умляутами.
Латинское ö (как одна кодовая точка Unicode )(, представленная как 0xC3 0xB6 в utf8 ).
СТРОЧНАЯ ЛАТИНСКАЯ БУКВА O С ДИЕРЕЗИСОМ (U+00F6)
Латинское ö
$ printf 'L\xC3\xB6ffler'; echo
Löffler
Латинское ö (как буква o, за которой следует диарезис)(0x6F 0xCC 0x88 в utf8 ).
ОБЪЕДИНЕНИЕ ДИАЭРЕЗА (U+0308)
Диэрезис
$ printf 'Lo\xCC\x88ffler'; echo
Löffler
И :Кириллица о с диэрезисом (это 0xD3 0xA7 в utf -8)
СТРОЧНАЯ КИРИЛЛИЧНАЯ БУКВА O С ДИЕРЕЗИСОМ (U+04E7)
Кириллица O с диэрезисом
$ printf 'L\xD3\xA7ffler'; echo
Lӧffler
Чтобы создать три файла с этими именами, вы можете использовать:
$ touch $(printf 'L\xC3\xB6ffler Lo\xCC\x88ffler L\xD3\xA7ffler')
Способ перечисления таких файлов заключается в использовании Glob, который соответствует (только тем файлам ).
В этом случае конечный ffler
появляется для всех файлов.
$ echo *ffler
Löffler Löffler Lӧffler
Какие результаты этого эха можно подробно просмотреть с помощью:
$ echo *ffler | od -vAn -tx1c
4c 6f cc 88 66 66 6c 65 72 20 4c c3 b6 66 66 6c
L o 314 210 f f l e r L 303 266 f f l
65 72 20 4c d3 a7 66 66 6c 65 72 0a
e r L 323 247 f f l e r \n
Что просто отражает тот факт, что все они разные.
Если они назначены позиционным аргументам оболочки:
$ set -- $(echo *ffler)
Мы можем сравнить каждый:
[ "$1" == "$2" ] && echo "Diferent" || echo "Equal"
Однако разумно ожидать, что первое и второе будут эквивалентны.
Но они отличаются способом выполнения «композиции» . 'L\xC3\xB6ffler'
использует составную )форму NFC (.
В 'Lo\xCC\x88ffler'
используется форма NFD (de -, составленная ).
Вы можете использовать uconv(из пакета icu -devtools)для преобразования этих двух форм.
В разложившемся виде:
$ echo *ffler | uconv -x any-nfd | od -vAn -tx1c
4c 6f cc 88 66 66 6c 65 72 20 4c 6f cc 88 66 66
L o 314 210 f f l e r L o 314 210 f f
6c 65 72 20 4c d0 be cc 88 66 66 6c 65 72 0a
l e r L 320 276 314 210 f f l e r \n
В предварительно -составленной форме:
$ echo *ffler | uconv -x any-nfc | od -vAn -tx1c
4c c3 b6 66 66 6c 65 72 20 4c c3 b6 66 66 6c 65
L 303 266 f f l e r L 303 266 f f l e
72 20 4c d3 a7 66 66 6c 65 72 0a
r L 323 247 f f l e r \n
Теперь, если мы установим эти значения в качестве позиционных параметров и сравним их:
$ set -- $( echo *ffler | uconv -x any-nfc | od -vAn -tx1c )
$ [ "$1" == "$2" ] && echo "Diferent" || echo "Equal"
Символ кириллицы не эквивалентен ни одной из форм этого состава.
Если вам нужно преобразовать его, чтобы вы могли сравнить это имя с другими, вам нужен инструмент, который понимает многобайтовые символы -.
$ echo *ffler | sed 's/\xd3\xa7/\xc3\xb6/g' | od -vAn -tx1c
4c 6f cc 88 66 66 6c 65 72 20 4c c3 b6 66 66 6c
L o 314 210 f f l e r L 303 266 f f l
65 72 20 4c c3 b6 66 66 6c 65 72 0a
e r L 303 266 f f l e r \n
И работает только в формате NFC:
$ echo *ffler | uconv -x any-nfc | sed 's/\xd3\xa7/\xc3\xb6/g' | od -vAn -tx1c
4c c3 b6 66 66 6c 65 72 20 4c c3 b6 66 66 6c 65
L 303 266 f f l e r L 303 266 f f l e
72 20 4c c3 b6 66 66 6c 65 72 0a
r L 303 266 f f l e r \n
Теперь эти три имени совершенно одинаковы.
Проясняет ли вышесказанное вашу истинную озабоченность?
Это даже близко?
Предположим, ваш скрипт называется monitor.sh
. Есть много команд, которые вы можете использовать в Linux для отправки электронной почты.
Например, с помощью команды mail
:
mail -s "Monitor Report" admin@example.com < <( bash monitor.sh )
Сsendmail
:
echo "Subject: Monitor Report" | sendmail -v admin@example.com < <( bash monitor.sh )
Сssmtp
:
ssmtp admin@example.com < <( echo "Subject: Monitor" ; bash monitor.sh )
С помощью curl
и Gmail:
bash monitor.sh > report.txt
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd \
--mail-from 'developer@gmail.com' --mail-rcpt 'admin@example.com' \
--upload-file report.txt --user 'developer@gmail.com:your-accout-password'
Если вы хотите, чтобы это происходило автоматически каждые 2 часа, поместите команду в cron (см. man crontab ).
Скорее всего, на вашем сервере уже правильно настроена одна из приведенных выше команд для отправки электронной почты (sendmail
, mail
, ssmtp
). Если нет, посмотрите, как их установить и настроить.
Ссылки:
https://blog.edmdesigner.com/send-email-from-linux-command-line/
https://tecadmin.net/ways-to-send-email-from-linux-command-line/
Возможно, это поможет вам получить ожидаемый результат
echo "Hourly report : \n $(cat \$file.log)" | mailx -s "Subject : add_your_subject" example@gmail.com
Вы даже можете добавить -a
к вышеуказанной команде mailx, чтобы прикрепить журнал, сгенерированный как вложение
убедитесь, что вы хотите добавить вложение.. создайте журнал с помощью date+time
, как показано ниже
ABC_12_09_2020_1_56_34.log
вы можете написать сценарий, который будет выбирать последний файл в качестве файла при создании нового журнала, а ваша команда mailx во время работы должна выбрать последний файл журнала в качестве вложения