0

最初に、私がスクリプト初心者であることを認めますが、基本的に、実行しようとしているコマンドにダッシュが 2 つあると、expect セッションを生成するのに問題があります。つまり、次のようになります。

#!/usr/bin/expect -f
set command "mysqlimport -h mysql.someserver.amazonaws.com -P 3306 -u root --fields-enclosed-by=\"|\" -p myDBHere --local /var/www/csvuploads/tablename "
spawn {*}$command
expect "password:"
send -- "mypassword\r"

次のようなエラーが表示されます。

mysqlimport: Error: 1083, Field separator argument is not what is expected; check the manual, when using table: INT_BRN_BRAND

今、私は何が起こっているのか知っていると思います。二重ダッシュがスポーンによって取得され、mysqlimport がフィールド区切り文字セットを取得していないと思います。送信の後に「--」を入れるのと同じ理由です。これは、指定されたコマンドにこれ以上オプションがないことをTCLまたはExpectに伝えていると思います。

本当の質問

では、フラグを持つプロセスをどのように生成するのでしょうか?

私が試したこと

スポーン後にダブル ダッシュを追加します。\u002d を使用してコマンド テキスト内のダッシュをエスケープする autoexpect を使用して、必要なことを行うスクリプトを生成します。mysqlimport を生成する代わりに、新しい bash シェルを生成して、それにコマンドを「送信」してみました。私は近づいたが、まったく異なる一連の問題に遭遇した.

4

2 に答える 2

1

二重ダッシュを中かっこで囲んでみてください。これは、展開せずに spawn コマンドにそれらを渡すように TCL に指示します。

#!/usr/bin/expect -f

spawn ls {--all} /tmp
interact

詳細については、 http://jazimmer.com/tclbook/select/Html/2.5.htmlを参照してください。

于 2013-10-17T03:23:26.613 に答える