|
|
|
shell script проблема с read
|
|||
|---|---|---|---|
|
#18+
Привет! возникла необходимость сравнить таблички с одинаковыми именами в БД Oracle (в разных схемах). Решил сделать это с помощью shell'а. Имена таблиц для сравнения храню в файле inp: Код: plaintext 1. 2. 3. 4. 5. сам скрипт выглядит следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. процедура procrec() - считывает построчно файл inp . процедура chktabsexist() - проверяет имеется ли таблица (имя мы как раз из inp считываем) в заданной схеме (сейчас там просто жестко задано условие where table_name like '%ARAGREEMENT' , но должно быть что-то вроде where table_name like '$1' ). Проблема состоит в том, чтобы вернуть результат работы chktabsexist() в procrec() . Если вызов chktabsexist() , оставить как есть Код: plaintext Код: plaintext Думаю что это из-за того что один read, вызывается внутри другого (в цикле). Как вариант, думаю использовать массив, в который в одном цикле будут считываться имена таблиц, а в другом, все это дело обрабатываться. Только не знаю как сделать, чтобы при переходе выполнения от одной процедуры к другой, значения переменных этого массива не терялись. ------------ На злобу дня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 11:00:25 |
|
||
|
shell script проблема с read
|
|||
|---|---|---|---|
|
#18+
Castor read внутри read не виновата. Она вполне реентерабеьна, если можно так выразиться :-) на самом деле даже если read не закомментировано - Ваша функция выполняется chktabsexist которая Просто теряется ее вывод. Переменные тоже не заполнятся - для эксперимента попробуйте так chktabsexist $inp | grep "result:" | while read xdummy oae_count; do echo "xdummy=$xdummy oae_count=$oae_count"; done увидите, что они на самом деле заполняются :-) Но потом при выходе из блока Вы их потеряете. Я бы сделал просто по другому set `chktabsexist $inp | grep "result:"` xdummy=$1 oae_count=$2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 12:10:47 |
|
||
|
shell script проблема с read
|
|||
|---|---|---|---|
|
#18+
или если очень хочется read - то можно через here document Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 12:26:37 |
|
||
|
shell script проблема с read
|
|||
|---|---|---|---|
|
#18+
--null-- , спасибо! Сделал как Вы рекомендовали, работает: Код: plaintext 1. 2. а если делать так: Код: plaintext 1. 2. то ругается на "<<" syntax error at line 29 : `<<' unmatched ------------ На злобу дня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 17:24:41 |
|
||
|
shell script проблема с read
|
|||
|---|---|---|---|
|
#18+
да. странно, что ругается на << я даже в Korn Shell специально -попробовал - работает, в том числе в контексте такого как раз скрипта, внутри цикла while read. Хрен с ним конечно, однако странно. Обычно ругается here document <label> unclosed, если закрыть забыли, но здесь вроде все нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 18:12:53 |
|
||
|
|

start [/forum/topic.php?fid=25&msg=33852144&tid=1489284]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 351ms |

| 0 / 0 |
