VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

AGI variables in Bash

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Re: AGI variables in Bash

Сообщение TVMaker »

Кстати про bash... Есть ли в нём человеческий способ реализовать функцию изменения регистра строки? Подумал прикрутить к астеру SMS-управление, чтобы входящие команды были регистронезависмыми. В этих ваших интернетах не нашёл, можно ли в bash сделать UPPERCASE содержимому ПЕРЕМЕННОЙ. Для вывода в stdout - как нефиг делать, а вот для возврата в переменной - нифига. Или я дурак :D
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

Re: AGI variables in Bash

Сообщение gosha »

var=`echo ${var} | ...`

сильно не человечно ?
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Re: AGI variables in Bash

Сообщение TVMaker »

gosha, не ругайся. До применения фигурных скобок в данном случае я не допёр :oops:
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Re: AGI variables in Bash

Сообщение TVMaker »

Да и скобки не помогли. Тестовый скрипт:

Код: Выделить всё

#!/bin/sh

OK=$@
echo $OK | tr a-z A-Z
OK='echo ${OK} | tr a-z A-Z'
echo SET VARIABLE bashres ${OK}
test.sh teTEte

Выхлоп:

TETETE
SET VARIABLE bashres echo ${OK} | tr a-z A-Z


То есть просто в stdout пишется всё замечательно. А вот присвоить это переменной - фиг :cry:
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Re: AGI variables in Bash

Сообщение TVMaker »

Видимо, проблема из-за того, что запускаю я это всё в busybox. В интернетах пишут, что утилиты в нем - не совсем те, что в "большом" линуксе. Так что сорри, тревога была ложной...
menzoberronzan
Сообщения: 45
Зарегистрирован: 27 фев 2013, 12:15
Откуда: Пенза
Контактная информация:

Re: AGI variables in Bash

Сообщение menzoberronzan »

Проблема в том что ты не знаешь sh.

Твой вариант:

Код: Выделить всё

#!/bin/sh
OK=$@  # все параметры в OK
echo $OK | tr a-z A-Z # тестовый вывод OK в uppercase
OK='echo ${OK} | tr a-z A-Z' # присваиваем в OK строку 'echo ${OK} | tr a-z A-Z'
echo SET VARIABLE bashres ${OK} # выводим строку 'SET VARIABLE bashres echo ${OK} | tr a-z A-Z'
Выхлоп будет таким:

Код: Выделить всё

user@debian:~$ ./bad.sh aAswWd
AASWWD
SET VARIABLE bashres echo ${OK} | tr a-z A-Z
Правильный вариант:

Код: Выделить всё

#!/bin/sh

OK=$@ 
echo $OK | tr a-z A-Z
OK=`echo ${OK} | tr a-z A-Z` # внимание на апострофы
echo SET VARIABLE bashres ${OK}
Выхлоп в этом случае будет таким:

Код: Выделить всё

user@debian:~$ ./good.sh aAswWd
AASWWD
SET VARIABLE bashres AASWWD
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Re: AGI variables in Bash

Сообщение TVMaker »

Да, шелл я только начал изучать. Кстати, астер ругается на такую конструкцию:

Код: Выделить всё

ERROR[30111]: utils.c:1232 ast_carefulwrite: write() returned error: Broken pipe
Видимо, так и придётся ради одной функции ставить php (там она стандартная вроде как) и ковыряться в нем.
Аватара пользователя
Wapo
Сообщения: 795
Зарегистрирован: 02 мар 2011, 17:53

Re: AGI variables in Bash

Сообщение Wapo »

Нет, данная хрень вылазит ВСЕГДА если не сделать перед вызовом AGI такое: Set(AGISIGHUP="no")
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

Re: AGI variables in Bash

Сообщение gosha »

эта хрень (broken pipe) от того что вы не читаете то, что вам астериск запихал в stdin.
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Re: AGI variables in Bash

Сообщение TVMaker »

Таки поставил PHP и реализовал в нём. Но вот хрень с broken pipe осталась. Не помог рецепт Wapo с установкой переменной, ни рецепт gosha с чтением всего из stdin. Переменную установил, вычитываю из stdin всё, что нужно (согласно рецептов священной книги и интернетов) - хрень остается. Не мешает, конечно же. Но хотелось бы понять причину, ее вызывающую.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH