1

私はMAC OSX用のC++プログラムを書いています.jsをサーバーにアップロードするための3番目のパリティプログラム「parse」があります。ターミナルで実行するコマンド行はわずかです。

>parse new [folder]
Login>[email]
Pw>[pw]
projectID>[pid]

オートにしたい。私のプログラムでこのプロセスを実行しましたが、すべての cmd をまとめてパックする方法がわかりません。

私が電話するときsystem("parse new [folder] && [email] && [pw] && [pid]");

ログイン時の処理保留 >

それから私は電話しますsystem("parse new [folder] && wait && [email] && wait && [pw] && wait && [pid]");

それはまだログイン時に保持されます>

cmd のパラメータを入力する方法を教えてください。ありがとう

4

2 に答える 2

1

コマンドの名前を正確に覚えていませんでしたが、存在します。

今、私はそれを見つけました。コマンドは、expect説明したようなプロンプトを待ってから、キーボードのふりをしてデータを入力します。簡単な例:

#!/usr/bin/expect


set timeout 20

spawn "./parse"

FOLDER="/x/y/z"
LOGIN="Randy"
PASSWORD="horse_stapler"
PROJECTID="136729"


expect "parse new " { send "$FOLDER" }
expect "Login>" { send "$LOGIN" }
expect "Pw>" { send "$PASSWORD" }
expect "projectID>" { send "$PROJECTID" }

interact

... このような他の例はこちら.

ちょっと待って。

知っておくべきことが 2 つあります。

まず、スクリプトの先頭が「#!/usr/bin/expect」になっているのは、これがbashではないからです。代わりに、これは独自の特別な種類のスクリプトです。詳しくはリンク先をご覧ください。

これはとても重要です。私はこれに立ち入るつもりはありませんが、決してパスワードをプレーンテキストとしてプログラム内に保存しないでください。セキュリティ上の大きな脆弱性があるため、このプログラムを平文のパスワードを持っている人に渡さないでください。

于 2013-07-24T04:17:28.637 に答える
0

プログラムはparse標準入力から読み取っているようです。それが正しい場合は、メール、ディレクトリ、およびプロジェクト ID が別々の入力行に指定されていることを確認する必要があります。

これが単純なシェル スクリプトから機能するかどうかをテストします。

parse new [folder] <<EOF
[email]
[pw]
[pid]
EOF

動作する場合は、に渡す文字列に複数の行を含む同じコマンドをフォーマットする必要がありますsystem()

うまくいかない場合は、parseプログラムが標準入力以外のものから読み取っていることを示しています。/dev/ttyそれは、何か他のものに夢中になっている可能性があります。straceそれが実際にどのようなシステムコールを行うかを確認するために、それが何をするか、または同様のプログラムで何をするかをよく調べます。

etc を使用したコードは機能し&&ません。parseこれはコマンドを実行し、成功した場合はプログラムを実行し[email]、何らかの不運によって動作する場合は[pw]、およびを実行し[pid]ます。

于 2013-07-24T04:18:28.143 に答える