LinuxForum.Fans
Тема

Область видимости переменных в bash

Автор: trivium 25 сообщений 6280 просмотров
#315617
"trivium" написал:
Так вот же код:
text
#!/bin/bash
while true
do
    echo "$PREV_FILE_PATH"

PREV_FILE_PATH=`mysql -h$DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME ... while read ...; do

echo "777" done`

done

Меня смущает

text

while read ... ; do
           echo "777"
done

У нас тут получается почти пустой цикл, который читает ... и выводит 777. По идее, такая запись должна давать ошибку, поскольку у нас перед этим циклом мускул читает ... , и между двумя операторами нету разделителя «;».
Я бы, ИМХО, сделал как-то так:

text
#!/bin/bash
while true
do
    echo "$PREV_FILE_PATH"

PREV_FILE_PATH=`mysql -h$DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME ... ` echo "777" done

#315622
"trivium⇓" написал:
Так вот же код:

дык, это огрызок какой-то...
«полный» значит без сокращений, которые по твоему разумению должны были бы быть очевидны, но на самом деле это совершенно не так...

"trivium⇓" написал:
Да, я читал про subshell и пробовал указывать в конце пути, но я так понял не в этом дело, а во внутренней выборке в цикле.

опять же, что за внутренняя выборка?
на bash'е вариант с подстановкой процесса должен работать...

#315627

Сори, не тот код вставил:

text
#!/bin/bash
while true
do
    echo "$PREV_FILE_PATH"

mysql -h$DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME ... while read ...; do

PREV_FILE_PATH="777" done

done

И запихивать вывод цикла в переменную не вариант, т.к. в этом цикле идут ещё выборки и выводится куча текста.

#315666
"trivium" написал:
И запихивать вывод цикла в переменную не вариант, т.к. в этом цикле идут ещё выборки и выводится куча текста.

Верно ли я понял, что в строчке с обращением к БД мускула «...» расшифровывается как

этом цикле идут ещё выборки и выводится куча текста
? Но тогда эта куча текста и должна подставляться в результат в примере из 20-го сообщения. А вам нужен именно результат работы мускула, так?
Тогда:
text
#!/bin/bash
while true
do
    echo "$PREV_FILE_PATH"
    PREV_FILE_PATH=`mysql -h$DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME`
    ...
    done

done

#315755
yars написал:
[quote="trivium"]И запихивать вывод цикла в переменную не вариант, т.к. в этом цикле идут ещё выборки и выводится куча текста.

Верно ли я понял, что в строчке с обращением к БД мускула «...» расшифровывается как

этом цикле идут ещё выборки и выводится куча текста
? Но тогда эта куча текста и должна подставляться в результат в примере из 20-го сообщения. А вам нужен именно результат работы мускула, так?
Тогда:
text
#!/bin/bash
while true
do
    echo "$PREV_FILE_PATH"
    PREV_FILE_PATH=`mysql -h$DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME`
    ...
    done

done

[/quote]
Нет, там цикл идёт, который кучу всего делает. Уже решил извращённым способом - файлами.

Войдите или зарегистрируйтесь, чтобы ответить.