Страница 2 из 3

Re: AGI variables in Bash

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

Re: AGI variables in Bash

Добавлено: 16 окт 2013, 15:01
gosha
var=`echo ${var} | ...`

сильно не человечно ?

Re: AGI variables in Bash

Добавлено: 16 окт 2013, 20:44
TVMaker
gosha, не ругайся. До применения фигурных скобок в данном случае я не допёр :oops:

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 пишется всё замечательно. А вот присвоить это переменной - фиг :cry:

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 всё, что нужно (согласно рецептов священной книги и интернетов) - хрень остается. Не мешает, конечно же. Но хотелось бы понять причину, ее вызывающую.