Скрипт Bash устанавливает соединение с помощью FreeTDS, взаимодействует, не выходит (просто зависает) - PullRequest
3 голосов
/ 27 марта 2011

Я использую FreeTDS в скрипте для вставки записей в базу данных MSSQL.Команды USE и INSERT работают, но команда exit не работает и зависает.Я пытался перенаправить stdout, но cat жалуется.Я полагаю, я буду использовать Ожидайте в противном случае.Мех.Спасибо.

echo -e "USE db\nGO\nINSERT INTO db_table (id, data, meta)\nVALUES (1, 'data', 'meta')\nGO\nexit" > tempfile cat tempfile - | tsql -H 10.10.10.10 -p 1433 -U user -P pass

1 Ответ

2 голосов
/ 27 марта 2011

Вы хотели сделать это: cat tempfile -? Это означает, что он будет ждать, пока вы нажмете Ctrl + D , потому что он также пытается читать со стандартного ввода.

Если нет, удалите -.

Кроме того, как предлагает Игнасио, вы могли бы написать это более чисто как наследник:

tsql -H 10.10.10.10 -p 1433 -U user -P pass <<EOF
USE db
GO
INSERT INTO db_table (id, data, meta)
VALUES (1, 'data', 'meta')
GO
exit
EOF

Или просто сделайте эхо с буквальными символами новой строки, а не \n:

echo "
USE db
GO
INSERT INTO db_table (id, data, meta)
VALUES (1, 'data', 'meta')
GO
exit
" > tempfile

и затем запустите его, используя стандартное перенаправление ввода (<), например:

tsql -H 10.10.10.10 -p 1433 -U user -P pass < tempfile
...