The OpenNET Project / Index page

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



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
Оставить в директории только три последние, по списку, файла, !*! universite, (Shell скрипты) 22-Авг-17, 01:02  [ | | | ] [линейный вид] [смотреть все]
Оставить в директории только три последние, по списку, файла

Вот список файлов:


# ls vzdump-qemu-502-*.log
vzdump-qemu-502-2017_08_11-03_15_02.log vzdump-qemu-502-2017_08_14-03_15_03.log vzdump-qemu-502-2017_08_17-03_15_01.log vzdump-qemu-502-2017_08_20-03_15_03.log
vzdump-qemu-502-2017_08_12-04_20_32.log vzdump-qemu-502-2017_08_15-03_15_02.log vzdump-qemu-502-2017_08_18-03_15_02.log vzdump-qemu-502-2017_08_21-03_15_02.log
vzdump-qemu-502-2017_08_13-03_15_03.log vzdump-qemu-502-2017_08_16-03_15_03.log vzdump-qemu-502-2017_08_19-04_22_59.log

Нужно оставить только эти три файла:


# ls vzdump-qemu-502-*.log | tail -3
vzdump-qemu-502-2017_08_19-04_22_59.log
vzdump-qemu-502-2017_08_20-03_15_03.log
vzdump-qemu-502-2017_08_21-03_15_02.log

Остальные удалить.

Вижу алгоритм:
1) переименовать файлы, оставленные жить.
2) удалить весь список файлов к удалению
3) переименовать обратно файлы

Хочется по-проще...

Подскажите, на чем сделать очередь?, !*! universite, (Shell скрипты) 24-Май-17, 04:03  [ | | | ] [линейный вид] [смотреть все]
Сейчас реализована через файл.
Добавляю элементы, дописывая в конец файла, каждый элемент с новой строки.
Беру N элементов очереди через awk и после обработки каждого єлемента удаляю через awk.

Хочется упростить свой велосипед, уменьшить IOPS.

Использовать Redis ? memcache ?



Почему не хватает привелегий для setreuid?, !*! belmondo, (Разное) 17-Сен-17, 12:53  [ | | | ] [линейный вид] [смотреть все]
написал небольшой кодик асм:
section .text
global _start
_start:
xor eax, eax
mov al, 0x71
xor ebx, ebx
xor ecx, ecx
xor esi, esi
xor edi, edi
syscall
mov al, 0x3c
syscall
который дропает ошибку:
$sudo nasm -static -f elf64 exit.asm && sudo ld exit.o -o exit && sudo ./exit; strace ./exit
[sudo] пароль для belmondo:
execve("./exit", ["./exit"], [/* 61 vars */]) = 0
setreuid(0, 0)                          = -1 EPERM (Operation not permitted)
strace: [ Process PID=7703 runs in x32 mode. ]
syscall_18446744072635809596(0, 0, 0, 0, 0, 0) = -1 (errno 38)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xffffffffffffffda} ---
+++ killed by SIGSEGV (core dumped) +++
Ошибка сегментирования (сделан дамп памяти)
Но код с такой же сутью на плюсах ее не дропает:
#include <unistd.h>
#include <iostream>
using namespace std;

int main() {
    cout << setreuid(0,0) << endl;
    return 0;
}
$ g++ -o check check.cpp && sudo ./check
0
В чем может быть проблема?

Bash кириллица, !*! Alex, (Shell скрипты) 20-Сен-17, 16:30  [ | | | ] [линейный вид] [смотреть все]
простая операция сравнения:

if [ $dd -eq "1" ] ;
then
  echo "ura" ;
fi

если dd равна 2, то все работает, а если "п"
то получаем:
integer expression expected

что с этим можно поделать ?

Не могу додумать алгоритм, !*! Перспективный, (Shell скрипты) 17-Сен-17, 08:52  [ | | | ] [линейный вид] [смотреть все]
Привет. Есть файл полученный awk '{print $3" "$8}' /var/log/access.log.1|sort|uniq -c >src
30 127.0.0.1 u1
23 192.168.0.2 u1
52 192.168.0.2 u3
106 192.168.0.2 u2
7 192.168.3.3 u2
36 192.168.3.3 u4

Хочу вывести строки уникальные по второму полю (по ip), но где цифра в первом поле больше.

Пока я застрял на таком. Двойным перебором сравниваю построчно, и если 2е поле совпадает и
1е поле больше, то печатаю строку. Для одинаковых выведенных строк к конце будет sort -u

IFS=$'\n'
for a in `cat src`; do
# $b нужно чтобы взять 2е поле. пока не научился взять 2е поле сразу из $a
    b=${a% *}
    for i in `cat src`; do
        [ "$a" = "$i" ] && continue
        j=${i% *}
        if [ "${j#* }" = "${b#* }" ] && [ "${i%% *}" -gt "${a%% *}" ];then
            echo "$i"
        fi
    done
done

#./test123.sh|./123.sh |sort -u
106 192.168.0.2 u2
36 192.168.3.3 u4
52 192.168.0.2 u3

хотя по идее должен был получить
106 192.168.0.2 u2
36 192.168.3.3 u4
30 127.0.0.1 u1

Подскажите, где доделать алгоритм или сразу неверно начал решать и надо переделать?

Странно сортирует MYSQL, !*! REVERT_BUILD, (MySQL) 15-Сен-17, 02:24  [ | | | ] [линейный вид] [смотреть все]
Вот запрос
SELECT * FROM journal WHERE ( error like '%timeout%' AND date >= STR_TO_DATE('01.09.2017 00:00:00', '%d.%m.%Y %H:%i:%s') AND date <= STR_TO_DATE('14.09.2017 23:59:59', '%d.%m.%Y %H:%i:%s') ) ORDER BY liftid ASC LIMIT 0, 50

А странность заключается в том, что данные он не сортирует.
Что я делаю не так? Может я чего-то не знаю?

Звук Bash, !*! Alex, (Shell скрипты) 13-Сен-17, 13:40  [ | | | ] [линейный вид] [смотреть все]
Подскажите, как в скрипте можно пикнуть в наушники.
Скажем 600Гц 1сек.
Спасибо.
  • app-misc beep, !*! Agressor (ok), 15:52 , 13-Сен-17 (1)
  • code echo x52 x49 x46 x46 xa6 x04 x00 x00 x57 x41 x56 x45 x66 x6d x74 x20 x10, !*! pavlinux (ok), 23:44 , 13-Сен-17 (2)
    > Подскажите, как в скрипте можно пикнуть в наушники. Скажем 600Гц 1сек.


    echo "\x52\x49\x46\x46\xa6\x04\x00\x00\x57\x41\x56\x45\x66\x6d\x74\x20\x10\x00
    \x00\x00\x01\x00\x01\x00\x40\x1f\x00\x00\x80\x3e\x00\x00\x02\x00\x10\x00\x4c
    \x49\x53\x54\x1a\x00\x00\x00\x49\x4e\x46\x4f\x49\x53\x46\x54\x0e\x00x00\x00
    \x4c\x61\x76\x66\x35\x36\x2e\x32\x35\x2e\x31\x30\x31\x00\x64\x61\x74\x61\x60
    \x04\x00\x00\xce\x04\xfc\xf9\x9f\xec\x7a\xe4\xe0\xe1\x65\xe6\x4b\xf0\xf7\xfd
    \xfe\x0b\x9d\x17\x11\x1e\x14\x1e\x7b\x17\xbc\x0b\x49\xfd\x44\xef\xba\xe4\x07
    \xe0\x45\xe2\x11\xeb\x94\xf8\xe3\x07\xa4\x15\xc0\x1e\x26\x21\x3a\x1c\x05\x11
    \xf5\x01\x61\xf2\xc3\xe5\xeb\xde\x61\xdf\x0e\xe7\x3e\xf4\x06\x04\xe1\x12\x8f
    \x1d\xb1\x21\x64\x1e\x63\x14\xea\x05\x2d\xf6\xa2\xe8\x4c\xe0\xfe\xde\x0a\xe5
    \x0f\xf1\x64\x00\x90\x0f\x21\x1b\x7a\x20\x69\x1e\x74\x15\xb6\x07\x5f\xf8\xf7
    \xea\x7a\xe2\xba\xe0\xf7\xe5\xed\xf0\x16\xff\x54\x0d\x8e\x18\x58\x1e\x79\x1d
    \x29\x16\x0a\x0a\xc4\xfb\x78\xee\x08\xe5\x7b\xe1\x92\xe4\x9d\xed\xa6\xfa\xd4
    \x08\x16\x15\xbc\x1c\x22\x1e\xf6\x18\x5c\x0e\xa2\x00\xc4\xf2\xcb\xe7\x14\xe2
    \xe7\xe2\x0d\xea\xfd\xf5\x1b\x04\x56\x11\xc8\x1a\x64\x1e\x62\x1b\x64\x12\x67
    \x05\x3c\xf7\xfa\xea\x4d\xe3\xe2\xe1\x07\xe7\x9f\xf1\x58\xff\x36\x0d\x34\x18
    \xea\x1d\x1b\x1d\xf3\x15\x05\x0a\xe5\xfb\xaa\xee\x37\xe5\x9b\xe1\xa0\xe4\x9b
    \xed\x99\xfa\xc6\x08\x06\x15\xb4\x1c\x1e\x1e\xfa\x18\x62\x0e\xa9\x00\xcb\xf2
    \xcd\xe7\x17\xe2\xe4\xe2\x0d\xea\xfa\xf5\x1a\x04\x55\x11\xc7\x1a\x64\x1e\x60
    \x1b\x65\x12\x68\x05\x3b\xf7\xfb\xea\x4e\xe3\xe3\xe1\x07\xe7\x9f\xf1\x58\xff
    \x35\x0d\x32\x18\xe9\x1d\x1b\x1d\xf3\x15\x04\x0a\xe5\xfb\xab\xee\x39\xe5\x9c
    \xe1\xa0\xe4\x9c\xed\x9b\xfa\xc5\x08\x08\x15\xb2\x1c\x1f\x1e\xf7\x18\x61\x0e
    \xea\xfc\xf5\x1a\x04\x56\x11\xc8\x1a\x65\x1e\x62\x1b\x64\x12\x68\x05\x3c\xf7
    \xfa\xea\x4c\xe3\xe1\xe1\x07\xe7\x9e\xf1\x57\xff\x36\x0d\x34\x18\xea\x1d\x1a
    \x1d\xf3\x15\x05\x0a\xe4\xfb\xaa\xee\x38\xe5\x9c\xe1\xa0\xe4\x9b\xed\x99\xfa
    \xc6\x08\x06\x15\xb4\x1c\x1e\x1e\xf9\x18\x61\x0e\xa7\x00\xca\xf2\xcc\xe7\x17
    \xe2\xe4\xe2\x0e\xea\xfb\xf5\x1b\x04\x56\x11\xc8\x1a\x65\x1e\x61\x1b\x65\x12
    \x67\x05\x3a\xf7\xf9\xea\x4c\xe3\xe2\xe1\x07\xe7\xa0\xf1\x5a\xff\x36\x0d\x33
    \x18\xea\x1d\x1b\x1d\xf3\x15\x03\x0a\xe4\xfb\xaa\xee\x37\xe5\x9b\xe1\xa0\xe4
    \x9c\xed\x9a\xfa\xc5\x08\x08\x15\xb3\x1c\x20\x1e\xf9\x18\x62\x0e\xa7\x00\xc8
    \xf2\xcc\xe7\x14\xe2\xe5\xe2\x0b\xea\xfb\xf5\x1a\x04\x57\x11\xc9\x1a\x66\x1e
    \x62\x1b\x64\x12\x67\x05\x3b\xf7\xf9\xea\x4c\xe3\xe1\xe1\x07\xe7\x9e\xf1\x58
    \xff\x37\x0d\x35\x18\xeb\x1d\x1b\x1d\xf3\x15\x05\x0a\xe4\xfb\xaa\xee\x37\xe5
    \x9a\xe1\x9f\xe4\x9b\xed\x99\xfa\xc7\x08\x07\x15\xb5\x1c\x1f\x1e\xfa\x18\x62
    \x0e\xa7\x00\xca\xf2\xcc\xe7\x16\xe2\xe4\xe2\x0d\xea\xfb\xf5\x1c\x04\x57\x11
    \xc9\x1a\x64\x1e\x60\x1b\x65\x12\x67\x05\x3a\xf7\xf9\xea\x4c\xe3\xe2\xe1\x07
    \xe7\xa0\xf1\x5a\xff\x36\x0d\x33\x18\xea\x1d\x1b\x1d\xf3\x15\x04\x0a\xe5\xfb
    \xaa\xee\x38\xe5\x9b\xe1\x9f\xe4\x9b\xed\x9a\xfa\xc4\x08\x08\x15\xb3\x1c\x20
    \x1e\xf8\x18\x62\x0e\xa7\x00\xc8\xf2\xcc\xe7\x15\xe2\xe7\xe2\x0c\xea\xfc\xf5
    \x1a\x04\x56\x11\xc8\x1a\x64\x1e\x61\x1b\x64\x12\x67\x05\x3b\xf7\xfa\xea\x4e
    \xe3\xe3\xe1\x08\xe7\x9e\xf1\x58\xff\x36\x0d\x34\x18\xea\x1d\x1a\x1d\xf3\x15
    \x05\x0a\xe4\xfb\xaa\xee\x37\xe5\x9b\xe1\x9f\xe4\x9b\xed\x99\xfa\xc6\x08\x07
    \x15\xb5\x1c\x1f\x1e\xfa\x18\x62\x0e\xa8\x00\xcb\xf2\xcc\xe7\x17\xe2\xe4\xe2
    \x0c\xea\xfa\xf5\x1a\x04\x55\x11\xc8\x1a\x65\x1e\x61\x1b\x66\x12\x69\x05\x3b
    \xf7\xfa\xea\x4d\xe3\xe2\xe1\x07\xe7\x9f\xf1\x58\xff\x35\x0d\x32\x18\xe9\x1d
    \x1b\x1d\xf4\x15\x04\x0a\xe5\xfb\xab\xee\x38\xe5\x9b\xe1\x9f\xe4\x9c\xed\x9a
    \xfa\xc5\x08\x08\x15\xb3\x1c\x21\x1e\xf9\x18\x63\x0e\xa8\x00\xc8\xf2\xcc\xe7
    \x14\xe2\xe6\xe2\x0b\xea\xfc\xf5\x1b\x04\x57\x11\xc9\x1a\x65\x1e\x62\x1b\x65
    \x12\x68\x05\x3c\xf7\xfa\xea\x4d\xe3\xe2\xe1\x08\xe7\x9e\xf1\x58\xff\x37\x0d
    \x34\x18\xea\x1d\x1a\x1d\xf3\x15\x05\x0a\xe4\xfb\xaa\xee\x38\xe5\x9b\xe1\x9f
    \xe4\x9a\xed\x99\xfa\xc7\x08\x07\x15\xb5\x1c\x1f\x1e\xfa\x18\x61\x0e\xa7\x00
    \xc9\xf2\xcb\xe7\x16\xe2\xe4\xe2\x0e\xea\xfc\xf5\x1d\x04\x56\x11\xc8\x1a\x64
    \x1e\x60\x1b\x64\x12\x67\x05\x3a\xf7\xf9\xea\x4c\xe3\xe2\xe1\x07\xe7\xa0\xf1
    \x59\xff\x37\x0d\x34\x18\xeb\x1d\x1b\x1d\xf2\x15\x04\x0a\xe4\xfb\xaa\xee\x39
    \xe5\x9c\xe1\xa1\xe4\x9c\xed\x9b\xfa\xc5\x08\x08\x15\xb2\x1c\x1f\x1e\xf7\x18
    \x61\x0e\xa7\x00\xc8\xf2\xcd\xe7\x14\xe2\xe6\xe2\x0c\xea\xfc\xf5\x1a\x04\x57
    \x11\xc8\x1a\x65\x1e\x62\x1b\x63\x12\x66\x05\x3b\xf7\xfa\xea\x4d\xe3\xe2\xe1
    \x08\xe7\x9f\xf1\x58\xff\x36\x0d\x34\x18\xe9\x1d\x19\x1d\xf2\x15\x04\x0a\xe5
    \xfb\xab\xee\x38\xe5\x9c\xe1\xa0\xe4\x9b\xed\x99\xfa\xc6\x08\x06\x15\xb4\x1c
    \x1e\x1e\xfa\x18\x62\x0e\xa7\x00\xca\xf2\xcc\xe7\x16\xe2\xe4\xe2\x0e\xea\xfb
    \xf5\x1b\x04\x55\x11\xc8\x1a\x64\x1e\x60\x1b\x66\x12\x68\x05\x3c\xf7\xfb\xea
    \x4e\xe3\xe3\xe1\x07\xe7\x9f\xf1\x59\xff\x35\x0d\x32\x18\xea\x1d\x1a\x1d\xf3
    \x15\x04\x0a\xe4\xfb\xac\xee\x36\xe5\xa1\xe1\x98\xe4\xa6\xed\x8a\xfa\xda\x08
    \xea\x14\xdb\x1c\xe8\x1d\x4d\x19\xb6\x0d\x61\x0e\xa7\x00\x1d\x04\x0" | aplay;

    сообщить модератору +/ответить
Perl и символ $, !*! Перспективный, (Perl) 12-Сен-17, 18:57  [ | | | ] [линейный вид] [смотреть все]
Привет, у меня не получается замена с символом $ на perl 5.26.0

вот так я делаю на sed
echo "aa bb$ cc"|sed -E 's|\S+\$|XXX|g'
aa XXX cc

а вот на perl
perl -E 'my $p="aa bb$ cc"; $p =~ s/\S+\$/XXX/g;  say "$p"'
aa bb

варианты с \Q \E не работают тоже. Как тут правильно делается?

Wildcard, !*! Alexander7, (Shell скрипты) 19-Авг-17, 20:09  [ | | | ] [линейный вид] [смотреть все]
Задача - найти/подставить файлы содержащие дохрена символов шестнадцатиричных чисел.

Смотрел man sh/dash/bash, хотел найти описание шаблона, но по строке wildcard ничего не нашёл.

Вопрос - есть ли подобие квантификаторов для шаблонов подстановки в sh?

Спасибо

Проверить наличие файлов в директории, !*! Alexander7, (Shell скрипты) 13-Авг-17, 09:17  [ | | | ] [линейный вид] [смотреть все]
Надо просто проверить пустая ли директория.
Ожидал, что в test будет аналог -s FILE, но не нашёл.

Написал такой колхоз
[ $(ls DIR | wc -l) -eq 0 ]

Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
И думаю вариант типа ls | head -n1 тоже не очень хорошо.

Есть ли более цивильное решение?

Спасибо



Сравнить два Yaml (Python или др.), !*! Aik, (Разное) 12-Авг-17, 15:57  [ | | | ] [линейный вид] [смотреть все]
Может кто-то уже сделал...

Чем/как сравнить два Yaml на Python?


Или вопрос в другой форме: посоветуйте пожалуйста, где взять готовый алгоритм сравнения деревьев смеси словарей и списков - словаря списков, списков словарей. Значения на самом нижнем уровне в словарях и/или списках это числа или строки.

Спасибо!

  • https github com seperman deepdiff, !*! Vlad (??), 15:37 , 16-Авг-17 (1)
    > Может кто-то уже сделал...
    > Чем/как сравнить два Yaml на Python?
    > Или вопрос в другой форме: посоветуйте пожалуйста, где взять готовый алгоритм сравнения
    > деревьев смеси словарей и списков - словаря списков, списков словарей. Значения
    > на самом нижнем уровне в словарях и/или списках это числа или
    > строки.
    > Спасибо!

    https://github.com/seperman/deepdiff


    сообщить модератору +/ответить
Как , !*! Dmitry, (Shell скрипты) 21-Июл-17, 18:26  [ | | | ] [линейный вид] [смотреть все]
Есть сервис который запускает java проложекние.
Для остановки его требуется время (около минуты)
Когда необходимо перегрузить сервер, он его киляет, не дождавшись завершения.
Как сделать чтобы systemd при перезагрузке компа ждал остановки процесса не киляя его?

[Unit]
Description=YouTrack
Before=shutdown.target reboot.target halt.target

[Service]
#Type=oneshot
#Type=forking
ExecStart=/usr/bin/java -Xmx1g -XX:MaxMetaspaceSize=250m -Djava.awt.headless=true -Djetbrains.youtrack.disableBrowser=true -jar youtrack-2017.2.34279.jar 8080
#ExecStop=/bin/kill -TERM $MAINPID & sleep
WorkingDirectory=/home/youtrack/youtrack
ReadWriteDirectories=/home/youtrack/youtrack
#Restart=always
#RestartSec=100
SyslogIdentifier=YouTrack
User=youtrack
Group=youtrack
RemainAfterExit=true
KillMode=none
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

Непонятная работа команды read, !*! Alexander7, (Shell скрипты) 20-Июл-17, 01:25  [ | | | ] [линейный вид] [смотреть все]
Если file не содержит конца строки, то

[ -f file ] && read A < file || A=

- не инициализируется переменная A

Пришлось взять в скобки

[ -f file ] && { read A < file ; } || A=

- так работает.

Т.е. не читает, если read использован с оператором && и файл без конца строки.

Вывод по шаблону, !*! MRDK, (Shell скрипты) 12-Июл-17, 12:58  [ | | | ] [линейный вид] [смотреть все]
Помогите пожалуйста, не могу разобраться, как вывести данные по шаблону.
Дано:
после применения  awk -F ',' '{print $1}' имеется поток данных вида
17071210.log:31:51.761007
17071210.log:31:51.761011
17071210.log:31:51.761013
17071210.log:31:51.761016
17071210.log:31:51.761020
17071210.log:31:51.761022
17071210.log:31:51.761026
(год+месяц+день+час.log:мин:сек.мс)
Надо преобразовать в формат час:мин
регулярка для этого (\d\d(?=\.log\:)).*((?<=\.log\:)\d\d)
где у нас в первой переменной окажется час, во второй - минуты.
Как это вывести на экран?
Шаблон sed 's/.*/регулярка/' выводит не результат работы, а само выражение
  • echo 17071210 log 31 51 761007,a,b,c 124 awk -F , print 1 17071210 l, !*! Andrey Mitrofanov (?), 13:46 , 12-Июл-17 (1)
    > Дано:
    > после применения  awk -F ',' '{print $1}' имеется поток данных вида
    > 17071210.log:31:51.761007
    > где у нас в первой переменной окажется час, во второй - минуты.
    > Как это вывести на экран?

    $ echo '17071210.log:31:51.761007,a,b,c' |awk -F ',' '{print $1}'
    17071210.log:31:51.761007
    $ echo '17071210.log:31:51.761007,a,b,c' |gawk -F ',' 'match($1,"([0-9][0-9])\\.log:([0-9][0-9])",aa){print aa[1],aa[2]}'
    10 31
    $ _

    > Шаблон sed 's/.*/регулярка/' выводит

    сообщить модератору +/ответить
  • echo 17071210 log 31 51 761007,a,b,c 124 sed s 0-9 0-9 log 0-, !*! _ (??), 17:25 , 12-Июл-17 (3)
    echo '17071210.log:31:51.761007,a,b,c' |sed 's/^.*\([0-9][0-9]\)\.log:\([0-9][0-9]\).*$/\1 \2/'
    10 31
    сообщить модератору +/ответить
  • Это perlесли уж с заглядыванием вперед и назад - то чуть рихтанутьecho 17071210 , !*! михалыч (ok), 19:45 , 12-Июл-17 (4)
    > 17071210.log:31:51.761022
    > 17071210.log:31:51.761026
    > (год+месяц+день+час.log:мин:сек.мс)
    > Надо преобразовать в формат час:мин
    > регулярка для этого (\d\d(?=\.log\:)).*((?<=\.log\:)\d\d)
    > где у нас в первой переменной окажется час, во второй - минуты.
    > Как это вывести на экран?

    Это perl
    если уж с заглядыванием вперед и назад - то чуть рихтануть

    echo 17071210.log:31:51.761007 | perl -pe 's/.*(\d\d)(?:(?=\.log\:)).*(?:(?<=\.log\:))(\d\d).*/$1:$2/'

    но лучше как на sed уже показали
    echo 17071210.log:31:51.761007 | perl -pe 's/.*(\d\d)\.log\:(\d\d).*/$1:$2/'

    так как-то короче, да и понятнее, а то куча вопросительных знаков воспринимается плохо
    и порождает дополнительные вопросы (мля, каламбурчик ))

    сообщить модератору +/ответить
Не разобрался с подстановкой $@, !*! Alexander7, (Shell скрипты) 08-Июл-17, 13:43  [ | | | ] [линейный вид] [смотреть все]
Если несколько аргументов у скрипта, то команда с проверкой наличия строки аргументов выдаёт сообщение об ошибке

[ "$@" ] - не работает, пишет "unexpected operator". Но я рассчитывал, что раз в кавычках, значит все аргументы будут просто подставлены как одна строка.

Str=$@ ; [ "$Str" ] - работает правильно.

Люди добрые, объясните пожалуйста, чего я не понял?

Проверял в sh и в bash.

Спасибо

  • я не понял - чего ты не понял командный интерпретатор - он такой интерпретат, !*! михалыч (ok), 18:24 , 08-Июл-17 (1)
    > Если несколько аргументов у скрипта, то команда с проверкой наличия строки аргументов
    > выдаёт сообщение об ошибке
    > [ "$@" ] - не работает, пишет "unexpected operator". Но я рассчитывал,
    > что раз в кавычках, значит все аргументы будут просто подставлены как
    > одна строка.
    > Str=$@ ; [ "$Str" ] - работает правильно.
    > Люди добрые, объясните пожалуйста, чего я не понял?
    > Проверял в sh и в bash.
    > Спасибо

    я не понял  - чего ты не понял? ))
    командный интерпретатор - он такой интерпретатор, одним словом, тот ещё фрукт,
    ну вот так вот он интерпретирует ))

    а если серьёзно, то зачем вам это?
    ну в смысле команда [ ] - это же эквивалент команды test
    что собрались протестировать? всю строку из аргументов?

    может в вашем случае можно обойтись проверкой общего количества ($#) переданных аргументов
    или проверкой какого-то конкретного аргумента, второго там или третьего ($2 $3)

    но если сильно хочется из разряда чего-то странного, то можно так

    #!/bin/sh

    # ./test.sh 1 blah bla2

    if [ "$(echo -n $@)" = "1 blah bla2" ] ; then
        echo OK
    else
        echo BAD
    fi


    или, сдаётся мне, это был риторический вопрос ))
    if [ $# -eq 0 ] ; then
        echo "enter the arguments"
    else
        :
    fi

    вот так!

    сообщить модератору +/ответить
  • 1 Ваша ошибка -- в рассчётах Пожроюности - в man bash , !*! Andrey Mitrofanov (?), 10:01 , 09-Июл-17 (2)
    > Если несколько аргументов у скрипта, то команда с проверкой наличия строки аргументов

    [ "$1" ]


    > [ "$@" ]
    >Но я рассчитывал,
    > что раз в кавычках, значит все аргументы будут просто подставлены как
    > одна строка.

    Ваша ошибка -- в рассчётах. Пожроюности - в man bash.

    сообщить модератору +/ответить
  • Две вещи 1 - это массив аргументов из командной строки, а вся командная, !*! ACCA (ok), 19:18 , 11-Июл-17 (7)
    > Люди добрые, объясните пожалуйста, чего я не понял?

    Две вещи:
        1. $@ - это массив аргументов из командной строки, а "вся командная строка" лежит в $*
        2. [ - это команда test. Ей нужен оператор, что же нужно сделать

    Напиши так и будет тебе счастье:

    [ -n "$*" ]

    сообщить модератору +/ответить
Ald-0.1.6., !*! _Mister, (Отладка и профилирование) 27-Июн-17, 13:52  [ | | | ] [линейный вид] [смотреть все]
Не идёт make. Ошибка в Readln.c. Как исправить? Ещё надо описание последней версии AsmUtils можно на английском.
Программирование USB, !*! _Mister, (C/C++) 29-Июн-15, 10:32  [ | | | ] [линейный вид] [смотреть все]
Начал компиллировать программу, компилляция не прошла. У меня usb.h. В нем всего две строки define и mod_devicetable.h. Не знаю в чем причина. Выдает u32 mask no.


Рисование в Ubuntu (Qt, OpenCV), !*! Алексей, (Библиотеки, функции) 09-Дек-16, 19:14  [ | | | ] [линейный вид] [смотреть все]
Доброго времени суток!

У меня, как выяснилось, весьма нетривиальная задача. Нужно под Ubuntu 14 написать приложение, которое автоматически создает графический файл (коллаж), включающий в себя фотографии и текстовые подписи. Сам коллаж я вполне успешно делаю на OpenCV. Но здесь встают следующие ограничения:
- надписи должны быть на русском языке;
- приложение должно быть консольным (должно работать без "иксов" в виде демона и запускаться через init.d).

Проблема началась тогда, когда обнаружилось, что OpenCV (как это ни странно) не дружит с UTF8, а следовательно, и с русским языком. Эту ветку развития пришлось забросить.

Тогда я пошел в обход, сделал проект в Qt5 и воспользовался классами QImage и QPainter, потом скопировал полученное изображение в матрицу OpenCV (благо, Qt с русским языком дружит). Но здесь не вышло с запуском приложения в виде демона: QPainter при запуске из-под консоли (класс QApplication был заменен на QCoreApplication) выдает ошибку сегментирования.

Когда не вышло здесь, я вернул QApplication на место и попробовал запустить своё приложение с ключом -platform offscreen, что исключило все вылеты программы, но возникла проблема со шрифтами: при старте приложения выдавалась ошибка QFontDatabase: Cannot find font directory, и приложение снова вываливалось с ошибкой сегментирования.

Тогда я установил переменную окружения QT_QPA_FONTDIR=/usr/share/fonts. Ошибка перестала возникать, но вместо русских символов на коллаже стали отображаться пустые квадратики.

Может быть, кто-нибудь мне сможет подсказать какую-то альтернативу, или то место, где я не додавил проблему до её логичного решения?

UPD: попробовал альтернативу - библиотеку CImg, но, как выяснилось, с русским языком не дружит и она...

Удаление строки после использования, !*! boroda4, (Shell скрипты) 13-Июн-17, 22:13  [ | | | ] [линейный вид] [смотреть все]
Всем привет. Есть скрипт. Если вратце то он из файла number.txt берет поочереди строки с номерами и создает файлы .call заменяя в них 123456 на номер из number.txt
Вопрос такой как изменить скрипт так, чтобы после использования каждого номера страка с номером удалялся бы из файла number.txt? Кучу всего перечитал, но так и не могу понять как это сделать.
Как получить полный путь вышестоящей директории?, !*! universite, (Shell скрипты) 08-Июн-17, 19:01  [ | | | ] [линейный вид] [смотреть все]
Сабж

Пока сделано так, ибо tar не понимает путей с /../ внутри...


dir="/tmp/sdaf/dsg/dg/df/gd/hf/d"
cd $dir/.. && dir2="$(pwd)"

Где-то видел вариант с awk, но не могу найти...

Bash сравнить строки, !*! lxs, (Shell скрипты) 06-Апр-17, 18:15  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте! Ломаю голову над задачей:

есть file_1:              и file_2:
7                       1  ftp://127.0.0.32:21
8                       2  ftp://10.0.0.5:21
11                     3  ftp://10.10.1.1:21
16                     4  ftp://10.201.1.2:21
18                     5  ftp://127.1.1.4:21
20                     6  ftp://191.168.1.35:21
24                     7  ftp://192.168.1.24:21
27                     8  ftp://10.10.1.4:21
29                     9  ftp://10.10.1.7:21
32                     10 ftp://192.168.1.39:21
...                                  ...
...                                  ...
120                    120 ftp://10.10.10.6:21
как по номерам из file_1 вывести соответствующие этим номерам строки в file_2?



Парсер значения, !*! VladiS, (Shell скрипты) 05-Июн-17, 13:48  [ | | | ] [линейный вид] [смотреть все]
Привет, камрады!

root@:~ # geli list
Geom name: vtbd0p4.eli
...
1. Name: vtbd0p4.eli
   Mediasize: 6441889792 (6.0G)
   Sectorsize: 4096
   Mode: r0w0e0
Consumers:
1. Name: vtbd0p4
   Mediasize: 6441892352 (6.0G)
   Sectorsize: 512
   Stripesize: 0
   Stripeoffset: 541696
   Mode: r1w1e1

Пытаюсь присвоить переменной значение 6441892352.
geli list | sed '/Name: vtbd0p4.eli/,+2d' | grep 'Mediasize' | sed 's/[A-z,:, ,)]//g; s/(.*)//'

Но что-то мне подсказывает, что я редкостный изврат. :-)

Сохранение в файл результата Bash, !*! dboon, (Shell скрипты) 02-Май-17, 18:15  [ | | | ] [линейный вид] [смотреть все]
Собственно хочу отсортировать более определенного количества и добавить в файл, отсортировать получается, а при записи выдает вот это.
66.249.76.127: No such file or directory
66.249.76.127
cat: 188.35.131.159: No such file or directory
188.35.131.159
cat: 212.164.95.16: No such file or directory
212.164.95.16
cat: 92.243.183.14: No such file or directory
92.243.183.14
cat: 91.239.126.75: No such file or directory
91.239.126.75
cat: 5.138.107.190: No such file or directory
5.138.107.190
cat: 83.220.236.254: No such file or directory
83.220.236.254

Нужно чтобы записывало ipшники в файл.

Сам скрипт
#!/bin/sh
if ! [ -f ./waitlist.txt ]
then
echo " " >waitlist.txt
fi

for strip in `awk '{print $1}' /var/www/httpd-logs/xxxxx.access.log | sort | uniq -c |sort -hr|awk '{if($1>1000){print $2}}'`

do
findd=`grep -e "$strip" waitlist.txt`
if [ -n $findd ]
then
<------>`cat $strip >> blacklist.txt`
<------>echo $strip
fi
done

помогите прозреть)

diff в разные файлы., !*! pavlinux, (Shell скрипты) 21-Апр-17, 01:53  [ | | | ] [линейный вид] [смотреть все]
1. Надо сделать .diff/.patch, но не простой, а волшебный - чтоб "далёкие" изменения
даже в одном файле писались бы в раздельные файлы.

Пример: sys.c.diff

Диапазон с исключением, !*! neekonoff, (Shell скрипты) 18-Апр-17, 02:25  [ | | | ] [линейный вид] [смотреть все]
Подскажите пжлста, как в shell указать что например подсеть 192.168.1.0/24 кроме адресов 192.168.1.50 и 192.168.1.60?
Или может быть дайте правильную формулирвку для гугления.
Спасибо.
  • Правильная формулировка для гугления - XY problem shell-у подсеть на х не нужн, !*! ACCA (ok), 04:33 , 18-Апр-17 (1)
    > Подскажите пжлста, как в shell указать что например подсеть 192.168.1.0/24 кроме адресов
    > 192.168.1.50 и 192.168.1.60?

    Правильная формулировка для гугления - "XY problem"

    shell-у подсеть на х* не нужна. Ты что-то другое имел в виду. Подумай и скажи толком, что ты хочешь сделать.

    сообщить модератору +/ответить
  • например так exclude 50,60обработку exclude вам естественно надо реализовать сам, !*! ss (??), 09:52 , 18-Апр-17 (2)
    > Подскажите пжлста, как в shell указать что например подсеть 192.168.1.0/24 кроме адресов
    > 192.168.1.50 и 192.168.1.60?
    > Или может быть дайте правильную формулирвку для гугления.
    > Спасибо.

    например так:
    exclude 50,60
    обработку exclude вам естественно надо реализовать самостоятельно в скрипте.
    например если доступ к адресам 192.168.1.0/24 у вас разворачивается в цикле-
    то добавить правило внутрь цикла-
    if exists exclude then nop (посмотрите как это реализуется в вашей версии shell)

    сообщить модератору +/ответить
  • всё зависит от контекста, смотря для чего это нужнонапример, для htaccess Rewri, !*! михалыч (ok), 12:53 , 18-Апр-17 (3) –1
    > Подскажите пжлста, как в shell указать что например подсеть 192.168.1.0/24 кроме адресов
    > 192.168.1.50 и 192.168.1.60?
    > Или может быть дайте правильную формулирвку для гугления.
    > Спасибо.

    всё зависит от контекста, смотря для чего это нужно

    например, для .htaccess
    RewriteCond %{REMOTE_ADDR} !192\.168\.1\.50
    RewriteCond %{REMOTE_ADDR} !192\.168\.1\.60
    RewriteCond %{REMOTE_ADDR} 192\.168\.1\.[1-254]

    можно вырубить и диапазон адресов
    RewriteCond %{REMOTE_ADDR} !10\.0\.[1-70]\.[1-254]

    для файервола ipfw в FreeBSD

    разрешить для всех в сети 192.168.1.0.24 кроме 50 и 60
    ipfw add 501 allow all from any to '192.168.1.0{1-49}'
    ipfw add 502 allow all from any to '192.168.1.0{51-59}'
    ipfw add 503 allow all from any to '192.168.1.0{61-254}'

    для файервола pf опять же в FreeBSD можно так
    pass in from !192.168.1.50

    если ip из черного списка можно объединить в меньшую подсеть,
    то иногда удобнее работать именно с подсетью сразу,
    например, нужно исключить ip 192.168.1.5/32 и 192.168.1.6/32
    тогда, объединив их в подсеть 192.168.1.4/30 можно исключать уже подсеть
    применительно к pf
    pass in from !192.168.1.4/30

    конечно, в таком случае мы жертвуем двумя адресам:
    на network 192.168.1.4 и на broadcast 192.168.1.7
    зато взамен получаем большую гибкость и меньшее количество правил

    как сказал ACCA
    > Подумай и скажи толком, что ты хочешь сделать

    и для чего

    сообщить модератору –1 +/ответить
Социальная сеть на C++, !*! анонимЪ, (C/C++) 05-Окт-15, 10:33  [ | | | ] [линейный вид] [смотреть все]
Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных фич, в качестве субд использовал sqlite + fts4, теперь не знаю что с ней делать.. Выкладывать исходники в сеть или стоит доработать и как-то выжать из нее доход? Ваше мнение//,
  • Давай еще смешные истории и анекдоты, у тебя они есть в запасе, я уверен , !*! PavelR (??), 11:23 , 05-Окт-15 (1) +2
    > Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp
    > (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных
    > фич, в качестве субд использовал sqlite + fts4, теперь не знаю
    > что с ней делать.. Выкладывать исходники в сеть или стоит доработать
    > и как-то выжать из нее доход? Ваше мнение//,

    Давай еще смешные истории и анекдоты, у тебя они есть в запасе, я уверен.

    сообщить модератору +2 +/ответить
  • Забить sqlite почти не масштабируется , !*! universite (ok), 11:24 , 05-Окт-15 (2)
    > Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp
    > (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных
    > фич, в качестве субд использовал sqlite + fts4, теперь не знаю
    > что с ней делать.. Выкладывать исходники в сеть или стоит доработать
    > и как-то выжать из нее доход? Ваше мнение//,

    Забить. sqlite почти не масштабируется.

    сообщить модератору +/ответить
  • Вот так это выглядит примерно, вглубь лезть не стал http postimg org image , !*! анонимЪ (?), 21:32 , 05-Окт-15 (13) –1
    Вот так это выглядит примерно, вглубь лезть не стал....

    http://postimg.org/image/s9wcdr0q9/


    сообщить модератору –1 +/ответить
  • Гришин и Мильнер бьются в истерике и ищут покупателя для своей поделки , !*! Square1 (?), 21:38 , 05-Окт-15 (14)
    > Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp
    > (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных
    > фич, в качестве субд использовал sqlite + fts4, теперь не знаю
    > что с ней делать.. Выкладывать исходники в сеть или стоит доработать
    > и как-то выжать из нее доход? Ваше мнение//,

    Гришин и Мильнер бьются в истерике и ищут покупателя для своей поделки.

    сообщить модератору +/ответить
  • Денис Попов, перелогиньтесь , !*! universite (ok), 22:19 , 05-Окт-15 (20) +1
    > Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp
    > (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных
    > фич, в качестве субд использовал sqlite + fts4, теперь не знаю
    > что с ней делать.. Выкладывать исходники в сеть или стоит доработать
    > и как-то выжать из нее доход? Ваше мнение//,

    Денис Попов, перелогиньтесь!

    сообщить модератору +1 +/ответить
  • Так и не могу понять, что смутило анонимов BSD httpd cgi sqlite fts4 g, !*! анонимЪ (?), 00:30 , 06-Окт-15 (28) –1
    > Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp
    > (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных
    > фич, в качестве субд использовал sqlite + fts4, теперь не знаю
    > что с ней делать.. Выкладывать исходники в сеть или стоит доработать
    > и как-то выжать из нее доход? Ваше мнение//,

    Так и не могу понять, что смутило анонимов? *BSD + httpd + cgi + sqlite/fts4 + gcc. Любой школьник осилит написать подобное. Видимо давно не писали что-то серьезнее скриптов типа rm -rf /tmp/*

    сообщить модератору –1 +/ответить
  • Хоть и не анонимус, но В глобальных масштабах ваша система работать не сможет , !*! XAnder (ok), 12:51 , 06-Окт-15 (34) +1
    Хоть и не анонимус, но...

    В глобальных масштабах ваша система работать не сможет по понятным причинам, уже разобранным тут. А кому и для чего нужна социальная сеть не в глобальных масштабах? И чтобы этому «кому» была от неё прибыль? Ответьте на эти вопросы и найдёте покупателя.

    Для личных контактов есть мыло и ворох мессеждеров. В корпоративном сегменте — то же самое плюс дополнительные средства, свои в каждой «корпорации», под неё заточенные, как правило. Хотите стать таким средством? Пилите под конкретную контору. Но там не котиков постить, там работать люди должны. В общем, сомнительно всё это.

    сообщить модератору +1 +/ответить
  • Благодарю за ответы Тему можно закрыть , !*! анонимЪ (?), 16:34 , 06-Окт-15 (38) –1
    Благодарю за ответы. Тему можно закрыть.
    сообщить модератору –1 +/ответить
  • Опасно выкладывать адрес сети на растерзание анонимам Не долго на сотню потоков, !*! анонимЪ (?), 20:30 , 06-Окт-15 (46) –1
    > Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp
    > (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных
    > фич, в качестве субд использовал sqlite + fts4, теперь не знаю
    > что с ней делать.. Выкладывать исходники в сеть или стоит доработать
    > и как-то выжать из нее доход? Ваше мнение//,

    Опасно выкладывать адрес сети на растерзание анонимам. Не долго на сотню потоков флуда нарваться с непривычки.

    сообщить модератору –1 +/ответить
  • Оглянитесь, возникла проблема Мозг многих занят лишь одним из ко, !*! анонимЪ (?), 20:40 , 06-Окт-15 (49) –1
    > Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp
    > (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных
    > фич, в качестве субд использовал sqlite + fts4, теперь не знаю
    > что с ней делать.. Выкладывать исходники в сеть или стоит доработать
    > и как-то выжать из нее доход? Ваше мнение//,

    Оглянитесь, возникла проблема..... Мозг многих занят лишь одним..... @#$%^ из контакта. Есть решение...

    сообщить модератору –1 +/ответить
  • Кто не примет связку BSD httpd sqlite c обречен на гибель и флуд во 100, !*! анонимЪ (?), 20:52 , 06-Окт-15 (52) –1
    > Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp
    > (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных
    > фич, в качестве субд использовал sqlite + fts4, теперь не знаю
    > что с ней делать.. Выкладывать исходники в сеть или стоит доработать
    > и как-то выжать из нее доход? Ваше мнение//,

    Кто не примет связку *BSD + httpd + sqlite + c++ обречен на гибель и флуд во 100 потоков. ?:%;№№@

    сообщить модератору –1 +/ответить
  • Так как теперь понятно, что эта соцсеть немедленных коммерческих перспектив не и, !*! Vjatcheslav (?), 12:34 , 26-Ноя-16 (53)
    > Уважаемые анонимусы опеннета, подскажите, как поступить. Написал социальную сеть на cpp
    > (cgi), повторяет базовые возможности этого вашего вконтакте, плюс еще пару эксклюзивных
    > фич, в качестве субд использовал sqlite + fts4, теперь не знаю
    > что с ней делать.. Выкладывать исходники в сеть или стоит доработать
    > и как-то выжать из нее доход? Ваше мнение//,

    Так как теперь понятно, что эта соцсеть немедленных коммерческих перспектив не имеет, то стоит оформить её как опенсурсную подключаемую библиотеку/компонент для тех проектов, в которых нужна будет функция такой сети. Ещё можно, если не полениться, приложить к проекту кроме лицензии ещё один документ - небольшой файлик, с предложением направлений в политике по развитию проекта в будущем, предназначенный для контрибьюторов. В него можно прописать вещи, которые повысят выживаемость проекта в будущем и обеспечат его развитие - например, такое его ведение, которое позволяет взять уже имеющиеся данные соцсети и в один клик мышки или клавы автоматически переехать на что то другое - тогда пользователи такого компонента будут его охотно использовать и их перестанет беспокоить мысли о том, что им придётся делать когда они, подобно растущим детям, "вырастут" и перерастут это простое приложение.
    Впрочем, если компонент станет со временем широкоиспользуемым, то можно будет подзаработать на его техподдержке и внесению в его опенсурсный код изменений по заказу.

    сообщить модератору +/ответить


Как подсчитать статистику траффика по каждому домену?, !*! universite, (Shell скрипты) 13-Мрт-17, 00:43  [ | | | ] [линейный вид] [смотреть все]
Есть несколько системных пользователей.
У каждого запущено по 10-ку сайтов.
В какой-то момент наблюдаются пики траффика и надо определить с-на какой это сайт.
Для всех сайтов пишутся access логи.

Ткните ссылку на скрипт или утилитку для подсчета числа отданных байт (с сортировкой или без) например с 12 часов дня в течении 15 минут.

P.S. Использовать Netflow нет возможности.

Python библитека для Git, !*! Aik, (Python) 21-Фев-17, 20:00  [ | | | ] [линейный вид] [смотреть все]
Какую Python библиотеку выбрать для работы с Git?
Для 2.7 и для 3 одну и ту же?
Непонятки с TTY, !*! grizzlynet, (Shell скрипты) 15-Фев-17, 17:18  [ | | | ] [линейный вид] [смотреть все]
Привет, коллеги! На удаленном хосте sudo-права есть. Передаю SSH ключ -t  чтоб аллоцировал терминал. Непонятно по какой причине нет tty! Возвращаяется ошибка: sudo: нет tty и не указана программа askpass.

#!/bin/bash
lhost=$1
for host in `cat $lhost`
do
cat ~/.ssh/id_rsa.pub | ssh -t user@$host 'sudo mkdir -p .ssh;
                                              sudo touch .ssh/authorized_keys;
                                              sudo cat >> .ssh/authorized_keys;
                                              sudo chmod 700 ~/.ssh;
                                              sudo chmod 600 ~/.ssh/authorized_keys'

done


Класс символов /\C/ в рег. выражениях устарел. как заменить ?, !*! VladimirV, (Perl) 13-Фев-17, 17:57  [ | | | ] [линейный вид] [смотреть все]
имеем ОС Ubuntu 16.04 и perl v5.22.1
проблема
не стартует сервис, завершается с ошибкой
\C is deprecated in regex; marked by <-- HERE in m/\C <-- HERE / at /usr/share/webgui/lib/WebGUI/Asset/Wobject/Poll.pm line 243.

вот строки с 243
243 if ($self->get('a'.$i) =~ /\C/) {
244            $answers .= $self->getValue("a".$i)."\n";
245        }

хотя на perldoc.perl.org пишут
The /\C/ regular expression character class is deprecated. From perl 5.22 onwards it will generate a warning, and from perl 5.24 onwards it will be a regular expression compiler error. If you need to examine the individual bytes that make up a UTF8-encoded character, then use utf8::encode() on the string (or a copy) first.
т.е. должно быть только предупреждение

нашел такой пример
+# XXX FIXME escape_char is buggy as it assigns meaning to the string's storage format.
sub escape_char {
-    return join '', @URI::Escape::escapes{$_[0] =~ /(\C)/g};
+    if (utf8::is_utf8($_[0])) {
+        my $s = $_[0];
+        utf8::encode($s);
+        unshift(@_, $s);
+    }
+
+    return join '', @URI::Escape::escapes{$_[0] =~ /(.)/sg};
}

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

  • Насколько я понимаю, здесь всего лишь проверяется, что get возвращает непустую с, !*! XAnder (ok), 12:48 , 14-Фев-17 (1)
    > вот строки с 243
    > 243 if ($self->get('a'.$i) =~ /\C/) {
    > 244            $answers .= $self->getValue("a".$i)."\n";
    > 245        }

    Насколько я понимаю, здесь всего лишь проверяется, что get возвращает непустую строку, поскольку /\C/ соответствует любой строке, содержащей хотя бы один байт, то есть любой непустой строке. \C — это низкоуровневая штука, понятно, почему её искореняют.

    Напрашивается замена на «ne ''».

    >[оверквотинг удален]
    >  sub escape_char {
    > -    return join '', @URI::Escape::escapes{$_[0] =~ /(\C)/g};
    > +    if (utf8::is_utf8($_[0])) {
    > +        my $s = $_[0];
    > +        utf8::encode($s);
    > +        unshift(@_, $s);
    > +    }
    > +
    > +    return join '', @URI::Escape::escapes{$_[0] =~ /(.)/sg};
    >  }

    Тут немного не про то, и как-то слишком намудрено по-моему: если строка в UTF-8, её снова кодируют в UTF-8. Хотя, контекста не видно, может тут так оно и надо.

    сообщить модератору +/ответить
 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



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

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