Unix AIXは、予想および生成する変数とパラメーターを渡します。

Unix AIXは、予想および生成する変数とパラメーターを渡します。

私は台本を書いています。SCP一部のファイルですが、ファイルの場所はユーザーまたは他のスクリプトによってパラメーターに渡される必要があります。

#!/usr/bin/expect

set FILEPATH1 $1

spawn sh "scp $FILEPATH1 $USER@$HOST:/destination/files"
        set pass "pass123"
        expect {
        password: {send "$pass\r"; exp_continue}
                  }

また、ビルドする前にこれを試して、#!/usr/bin/expect

FILEPATH1=$1

ベストアンサー1

これはあなたが望むことを行いません:

set FILEPATH1 $1

$1, $2, ...Tcl(および予想)は、コマンドライン引数にアクセスするためにシェルスタイル方式を使用しません。グローバルリストを使用したいです$argv

set FILEPATH1 [lindex $argv 0]

また、ビルド呼び出しが正しくありません。sh次を見つける文書名前は「scp $FILEPATH1 $USER@$HOST:/destination/files」です。 scpを生成するためにシェルは必要ありません。

spawn scp $FILEPATH1 $USER@$HOST:/destination/files

今、USERとHOSTはどこから来ましたか?環境変数ですか?もしそうなら、

spawn scp $FILEPATH1 $env(USER)@$env(HOST):/destination/files

また、スクリプトが終了する前に実際に転送が完了するのを待つ必要はありません。これを行う:

expect password:
send "$pass\r"
set timeout -1
expect eof

パスワードを一度だけ入力するように求められます。何度も入力する必要がある場合

expect {
    password: {
        send "$pass\r"
        set timeout -1
        exp_continue
    }
    eof
}

おすすめ記事