3

スクリプトで FreeTDS を使用して、レコードを MSSQL データベースに挿入しています。USEおよびコマンドはINSERT機能しますが、exitコマンドは機能せず、ハングします。リダイレクトしようとしましstdoutたが、cat文句を言います。それ以外の場合は、 Expectを使用すると思います。うーん。ありがとう。

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

4

1 に答える 1

2

これを行うつもりでしたか: cat tempfile -? 標準入力からも読み取ろうとしているため、Ctrl+が押されるのを待つことを意味します。D

そうでない場合は、 を削除し-ます。

また、Ignacio が示唆するように、ヒアドキュメントとしてよりきれいに書くことができます。

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
于 2011-03-26T21:47:49.167 に答える