OmA*_*mAr 5 scp aix shell-script expect
我正在编写一个脚本来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}
}
Run Code Online (Sandbox Code Playgroud)
在 spawn 和 #!/usr/bin/expect 之前也试过这个
FILEPATH1=$1
Run Code Online (Sandbox Code Playgroud)
这不是你想要的:
set FILEPATH1 $1
Run Code Online (Sandbox Code Playgroud)
Tcl(和expect)不使用shell 风格的$1, $2, ...
方式来访问命令行参数。您要使用全局$argv
列表:
set FILEPATH1 [lindex $argv 0]
Run Code Online (Sandbox Code Playgroud)
此外,您的 spawn 调用不正确。sh
将寻找一个文件名为“SCP的$ FILEPATH1 $ USER @ $ HOST:/目的/文件”。您不需要 shell 来生成 scp:
spawn scp $FILEPATH1 $USER@$HOST:/destination/files
Run Code Online (Sandbox Code Playgroud)
现在,USER 和 HOST 来自哪里?它们是环境变量吗?如果是这样的话:
spawn scp $FILEPATH1 $env(USER)@$env(HOST):/destination/files
Run Code Online (Sandbox Code Playgroud)
而且,您不会在脚本退出之前等待传输实际完成。做这个:
expect password:
send "$pass\r"
set timeout -1
expect eof
Run Code Online (Sandbox Code Playgroud)
我假设您只被提示输入一次密码。如果您必须多次输入它,那么
expect {
password: {
send "$pass\r"
set timeout -1
exp_continue
}
eof
}
Run Code Online (Sandbox Code Playgroud)