最初に、私がスクリプト初心者であることを認めますが、基本的に、実行しようとしているコマンドにダッシュが 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 シェルを生成して、それにコマンドを「送信」してみました。私は近づいたが、まったく異なる一連の問題に遭遇した.