2009-10-12 2 views
1

Учитывая сценарий оболочки, содержащий кучу операторов SQL, есть ли возможность перенаправлять только инструкции SQL в stdout/file?Захватить SQL, выполняемый в сценарии оболочки

Структура сценария что-то вроде этого:

...

for i in *list* 
do 
    isql *credentials etc* <<EOF > a.out 
    select *about 100 cols* 
from $i + "_TAB" 
go 
EOF 
done 

...

Запрос был упрощен, и является довольно сложным в действительности.

Как я могу захватить фактические операторы, которые выполняются при запуске этого скрипта?

Очень ценю вашу помощь.

ответ

1

Опция -e (и часто с -n) будет эхо вводить Sybase document for isql, хотя вы также получите результат. Если вы хотите, чтобы у вас не было выходного - выберите и т. Д., Вам нужно будет написать функцию isql, которая будет эхо-команд командной строки в один файл и запустить isql в другой (проще в perl или python)

+0

Извинения за отложенный ответ. Да, этот вариант будет работать, но надеялся, что мне не нужно много кода: В любом случае спасибо, Марк! – Beni

1

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

for i in *list* 
do 
    read -r -d '' select <<-EOF 
     select *about 100 cols* 
     from $i + "_TAB" 
     go 
     EOF 
    isql *credentials etc* <<< "$select" 
    echo "$select" > a.out 
done 

дефиса после << позволяет отступа здесь документ, но только с реальными закладками. Вкладки, преобразованные в пробелы, как это делается автоматически некоторыми редакторами, не будут работать.

+0

Деннис, тоже извиняюсь за задержанный ответ. Я пробовал это, но не работал вообще. Во-первых, echo $select дал мне забавный вывод (список всех файлов в pwd), а затем не было записей, возвращенных из БД (это должно быть правильно). – Beni

+0

Простите, '' select' должен иметь кавычки вокруг него, так как ваш запрос, вероятно, имеет в нем звездочки. Я отредактировал свой ответ. –