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