powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Непонятное поведение bash скрипта
1 сообщений из 1, страница 1 из 1
Непонятное поведение bash скрипта
    #38701062
ALex_hha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто объяснит почему себя так ведет bash скрипт. В общем написал простой bash скрипт, который используется как post-commit хук в svn сервере и ищет определенные слова в коде (а именно матюки). Если находит отправляет соотв нотификацию.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
    #!/bin/bash
     
    REPO_PATH="$1"
    REVISION="$2"
    REPO_URL="http://svn.example.net/RepoName/"
    HEAD="URL: ${REPO_URL}\nREVISION: ${REVISION}\nAUTHOR: $(/usr/bin/svnlook author ${REPO_PATH} -r ${REVISION})\n"
    BODY="\n\n*** The following files look suspicious: ***\n"
     
    if [ $(/usr/bin/svnlook changed -r ${REVISION} ${REPO_PATH} | grep -v ^D | wc -l) -eq 0 ]; then
        #Nothing to do. Exit
        exit
    fi
     
    /usr/bin/svnlook changed -r ${REVISION} ${REPO_PATH} | /bin/grep -v ^D | /bin/grep -E '\.(less|json|xml|(s)?css|js|txt|(s)?htm(l)?)$' | /usr/bin/awk '{print $2}' | (
    count=0
    while read curr_file
    do
        send_report=0
        word_count=$(/usr/bin/svnlook cat ${REPO_PATH} ${curr_file} | /bin/grep -E -i -n '(^|\s|[@`%$#><"_.,:;!/+*)(#\[])(ass|fuck)($|\s|[@`%$#><"_.,:;!/+*)(#\]])' | wc -l)
        count=$(($word_count+$count))
        if [ ${word_count} -ge 1 ]; then
            send_report=1
            BODY+="\n${REPO_URL}${curr_file}?p=${REVISION} :\n"
            BODY+="$(/usr/bin/svnlook cat ${REPO_PATH} ${curr_file} | /bin/grep -i -E -n '(^|\s|[@`%$#><"_.,:;!/+*)(#\[])(ass|fuck)($|\s|[@`%$#><"_.,:;!/+*)(#\]])')\n"
        fi
    done
     
    TOTAL_MATCH="Lines matched: ${count}\n"
     
    if [ ${send_report} -eq 1 ]; then
        /usr/bin/printf "${HEAD}${TOTAL_MATCH}${BODY}" | /usr/bin/mail -s "SUBJECT" admin@example.net
    fi



В общем проблема в том, что когда в регулярное выражение добавляю спец символы, то из хука скрипт не отрабатывает, а возвращает ошибку вида
Код: sql
1.
2.
3.
4.
5.
++ /bin/grep -E -i '(^|\s|[-@`%$#><"_.,:;!/+*)(#\[])(ass|fuck)($|\s|[-@`#$%><"_.,:;-!/\+*)(#])'
++ wc -l
/bin/grep: Invalid range end
svnlook: Can't write to stream: Broken pipe
+ word_count=0



Из консоли и крона скрипт отрабатывает без проблем и никаких ошибок нет, но если он дергается как хук из svn, то получаю подобную ошибку.

Так же возникают проблемы в том же Thunderbird, когда он пытается отобразить \fuck и интепретирует \f как спец последовательность.

Собственно вопрос. Почему из консоли отрабатывает нормально, а из хука нет. И как собственно пофиксить? :)
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Непонятное поведение bash скрипта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]