Bash脚本自动化:包括将文件从源文件复制到目标文件,在目标文件中执行脚本,并将结果从目标文件复制到目标文件
我需要创建一个自动化脚本,该脚本将按给定顺序执行以下操作:Bash脚本自动化:包括将文件从源文件复制到目标文件,在目标文件中执行脚本,并将结果从目标文件复制到目标文件,bash,shell,unix,Bash,Shell,Unix,我需要创建一个自动化脚本,该脚本将按给定顺序执行以下操作: 将一些脚本和XML从源复制到目标 在目标中运行脚本 将结果(即文件)从目标复制到源 我正在使用“expect”将文件从源复制到目标。然后,我尝试建立指向目标的ssh连接,并在目标中执行脚本。生成结果后,我将再次使用“expect”复制文件,但这次是从目标复制到源 我想知道是否有更好的方法来做同样的事情 使用“expect”复制文件的代码,因为我需要为scp传递密码: #!/usr/bin/expect -f set from [lin
#!/usr/bin/expect -f
set from [lindex $argv 0]
set to [lindex $argv 1]
set pass [lindex $argv 2]
puts "$from, $to and $pass ."
# connect via scp
spawn sudo scp -v -r $from $to
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send $pass\n
}
}
interact
你的解决方案是好的。您可以考虑使用SSHFS在SRC机器上安装远程目录,并使用该文件在SRC机器上使用的命令。 例如:
sudo sshfs -o allow_other,nonempty user@10.1.2.3:/project /project
你为什么要用expect
来做这个?显示您的代码将使这成为一个更具体、更不含糊的问题……此外,细节也很重要——如果脚本可以使用FIFO而不是具体的文件作为输入,那么您可能根本无法复制该文件,而只能通过网络传输它……例如,如果您的问题是“如何通过网络复制文件”,我们已经有很多问答条目显示了这一点——不使用expect
。如果您想对scp的问题始终回答“是”,请告诉它首先不要问这些问题;例如,scp-o ScriptHostChecking=no。如果要传递密码,请使用sshpass
,或者更好地使用RSA密钥身份验证。在这里没有必要期望expect
。不过,你在寻找什么样的“更好的方法”?您是否只想对所有三个通道使用一个经过身份验证的传输?您可以这样做--请参阅ControlMaster/ControlSocket系统,如中所述--这样,您只需设置一个SSH连接(仅验证一次),并通过它执行所有三个操作。