Unix AIX 将变量和参数传递给expect 和spawn

Unix AIX 将变量和参数传递给expect 和spawn

我正在写一个脚本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

Tcl(和期望)不使用 shell 风格的$1, $2, ...方式来访问命令行参数。您想使用全局$argv列表:

set FILEPATH1 [lindex $argv 0]

另外,您的生成调用不正确。sh将寻找一个文件名为“scp $FILEPATH1 $USER@$HOST:/destination/files”。你不需要 shell 来生成 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
}

相关内容