LINUX.ORG.RU

Помогите с шелл скриптом


0

0

Вобщем не пойму как сделать такую штуку

Есть файл $DB_SETTINGS_FILE со строкой вида:
$db_url = 'mysql://user:pass@host/db';

хочу в sh скрипте считать юзернейм, пасс, хост и дб в соответствующие переменные. Делаю так (можете не вчитываться в регексп. он 100% верный):

grep ^\$db_url $DB_SETTINGS_FILE | \
sed s'#^.*mysql://\([^:]*\):\([^@]*\)@\([^/]*\)/\([^'\'']*\).*#\1 \2 \3 \4#' | \
read DB_USERNAME DB_PASSWD DB_HOST DB_NAME

но в итоге переменные всёравно оказываются пустыми

погуглив, понял что при создании | пайпа, команда read выполняется в отдельном шелле и после завершения не возвращает обратно свои переменные. Поигрался с
export, но так и не смог добится результата=(
Остановился на конструкции grep ... | sed '....' | ( read ... ; остальное тело скрипта; )
Но это очень неудобно.

Вопрос: как мне модифицировать тот кусок чтобы он устанавливал мне переменные в текущем environment?

Хочется решение на sh, но на крайний случай сойдёт и bash

З.Ы. Конечно можно было сделать навроде:
DB_USERNAME=`многа букоф \1`
DB_PASSWD=`многа букоф \2`
DB_HOST=`многа букоф \3`
DB_NAME=`многа букоф \4`

но это както не кошерно...

★★★★★

eval `... | sed s'#^.*mysql://\([^:]*\):\([^@]*\)@\([^/]*\)/\([^'\'']*\).*#a=\1; b=\2; c=\3; d=\4#'`

echo $a
echo $b
echo $c
echo $d

sdio ★★★★★
()

>З.Ы. Конечно можно было сделать навроде: [...] но это както не кошерно...

Так вам шашечки или ехать?

php-coder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.