Bash脚本自动化:包括将文件从源文件复制到目标文件,在目标文件中执行脚本,并将结果从目标文件复制到目标文件

Bash脚本自动化:包括将文件从源文件复制到目标文件,在目标文件中执行脚本,并将结果从目标文件复制到目标文件,bash,shell,unix,Bash,Shell,Unix,我需要创建一个自动化脚本,该脚本将按给定顺序执行以下操作: 将一些脚本和XML从源复制到目标 在目标中运行脚本 将结果(即文件)从目标复制到源 我正在使用“expect”将文件从源复制到目标。然后,我尝试建立指向目标的ssh连接,并在目标中执行脚本。生成结果后,我将再次使用“expect”复制文件,但这次是从目标复制到源 我想知道是否有更好的方法来做同样的事情 使用“expect”复制文件的代码,因为我需要为scp传递密码: #!/usr/bin/expect -f set from [lin

我需要创建一个自动化脚本,该脚本将按给定顺序执行以下操作:

  • 将一些脚本和XML从源复制到目标
  • 在目标中运行脚本
  • 将结果(即文件)从目标复制到源
  • 我正在使用“expect”将文件从源复制到目标。然后,我尝试建立指向目标的ssh连接,并在目标中执行脚本。生成结果后,我将再次使用“expect”复制文件,但这次是从目标复制到源

    我想知道是否有更好的方法来做同样的事情

    使用“expect”复制文件的代码,因为我需要为scp传递密码:

    #!/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连接(仅验证一次),并通过它执行所有三个操作。