Страница 2 из 3
Re: AGI variables in Bash
Добавлено: 16 окт 2013, 14:38
TVMaker
Кстати про bash... Есть ли в нём человеческий способ реализовать функцию изменения регистра строки? Подумал прикрутить к астеру SMS-управление, чтобы входящие команды были регистронезависмыми. В этих ваших интернетах не нашёл, можно ли в bash сделать UPPERCASE содержимому ПЕРЕМЕННОЙ. Для вывода в stdout - как нефиг делать, а вот для возврата в переменной - нифига. Или я дурак
Re: AGI variables in Bash
Добавлено: 16 окт 2013, 15:01
gosha
var=`echo ${var} | ...`
сильно не человечно ?
Re: AGI variables in Bash
Добавлено: 16 окт 2013, 20:44
TVMaker
gosha, не ругайся. До применения фигурных скобок в данном случае я не допёр
Re: AGI variables in Bash
Добавлено: 17 окт 2013, 00:46
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 пишется всё замечательно. А вот присвоить это переменной - фиг
Re: AGI variables in Bash
Добавлено: 17 окт 2013, 02:09
TVMaker
Видимо, проблема из-за того, что запускаю я это всё в busybox. В интернетах пишут, что утилиты в нем - не совсем те, что в "большом" линуксе. Так что сорри, тревога была ложной...
Re: AGI variables in Bash
Добавлено: 17 окт 2013, 09:12
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
Re: AGI variables in Bash
Добавлено: 17 окт 2013, 14:02
TVMaker
Да, шелл я только начал изучать. Кстати, астер ругается на такую конструкцию:
Код: Выделить всё
ERROR[30111]: utils.c:1232 ast_carefulwrite: write() returned error: Broken pipe
Видимо, так и придётся ради одной функции ставить php (там она стандартная вроде как) и ковыряться в нем.
Re: AGI variables in Bash
Добавлено: 17 окт 2013, 14:05
Wapo
Нет, данная хрень вылазит ВСЕГДА если не сделать перед вызовом AGI такое: Set(AGISIGHUP="no")
Re: AGI variables in Bash
Добавлено: 17 окт 2013, 14:23
gosha
эта хрень (broken pipe) от того что вы не читаете то, что вам астериск запихал в stdin.
Re: AGI variables in Bash
Добавлено: 19 окт 2013, 01:57
TVMaker
Таки поставил PHP и реализовал в нём. Но вот хрень с broken pipe осталась. Не помог рецепт Wapo с установкой переменной, ни рецепт gosha с чтением всего из stdin. Переменную установил, вычитываю из stdin всё, что нужно (согласно рецептов священной книги и интернетов) - хрень остается. Не мешает, конечно же. Но хотелось бы понять причину, ее вызывающую.