我正在尝试编写一个expect脚本,它将自动执行scp命令并返回scp命令的状态。由于我是ecpect脚本的新手,我无法找到任何方法可以做到这一点。我需要的是使用expect脚本自动执行SCP命令,如果scp成功则以代码0退出,否则返回错误,如连接超时或链接在传输文件等时停止。
请帮我解决这个问题。
以下是我的脚本代码段:
# connect via scp
spawn scp -o ConnectTimeout=30 /home/user/file.tar.gz root@192.168.1.146:/home/user
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "abc\r"
}
}
interact
答案 0 :(得分:1)
你在wait
命令之后。从期望联机帮助页复制:
wait [args]
delays until a spawned process (or the current process if none is
named) terminates.
wait normally returns a list of four integers. The first integer
is the pid of the process that was waited upon. The second inte-
ger is the corresponding spawn id. The third integer is -1 if an
operating system error occurred, or 0 otherwise. If the third
integer was 0, the fourth integer is the status returned by the
spawned process. If the third integer was -1, the fourth integer
is the value of errno set by the operating system. The global
variable errorCode is also set.
Additional elements may appear at the end of the return value
from wait. An optional fifth element identifies a class of
information. Currently, the only possible value for this element
is CHILDKILLED in which case the next two values are the C-style
signal name and a short textual description.
The -i flag declares the process to wait corresponding to the
named spawn_id (NOT the process id). Inside a SIGCHLD handler,
it is possible to wait for any spawned process by using the spawn
id -1.
The -nowait flag causes the wait to return immediately with the
indication of a successful wait. When the process exits (later),
it will automatically disappear without the need for an explicit
wait.
The wait command may also be used wait for a forked process using
the arguments "-i -1". Unlike its use with spawned processes,
this command can be executed at any time. There is no control
over which process is reaped. However, the return value can be
checked for the process id.
这不包括由生成的子进程(在您的情况下为scp)或它包含的任何子进程生成的任何输出;默认情况下指向您通过expect
和interact
使用的虚拟终端。通过timeout
和eof
条款可以更好地处理超时和文件结束事件expect
/ interact
。