等待脚本通过 ssh 运行完成,然后再在 bash 脚本中继续操作

等待脚本通过 ssh 运行完成,然后再在 bash 脚本中继续操作

我有一个看起来有点像这样的脚本:

command1
command2
ssh login@machine_with_lots_of_ram:~/script_that_needs_ram.sh
command4 output_file_from_above

其中命令 4 需要 ssh 命令的输出。

如何告诉程序等待 ssh 脚本完成后再继续?或者更好的是,如何设置在命令 1 之后在远程计算机上运行的 ssh 脚本并阻止程序运行命令 4 直到它完成?

答案1

在命令(脚本)在远程服务器上执行完毕之前,SSH 会话不会退出。

根据脚本是将数据输出到服务器上的文件还是将数据输出到标准输出,您可以执行以下两种操作之一。

  1. 如果它将数据输出到服务器上的文件:

    ssh user@host script.sh
    scp user@host:remote_output local_output
    process_output local_output
    

    这基本上用于scp将数据从服务器复制到本地计算机。

  2. 如果将数据输出到标准输出:

    ssh user@host script.sh >local_output
    process_output local_output
    

    这会将脚本的标准输出重定向到本地文件。

设置程序先运行然后等待:

ssh user@host script.sh &

# do other stuff

wait
scp user@host:remote_output local_output
process_output local_output

或者

ssh user@host script.sh >local_output &

# do other stuff

wait
process_output local_output

wait暂停脚本,直到ssh命令(作为后台进程运行)退出。

答案2

如果您需要捕获远程命令的输出,类似这样的操作应该有效:

command1
command2
ssh login@machine_with_lots_of_ram "~/script_that_needs_ram.sh" > remote_output.log
command4 remote_output.log
# optionally:  rm remote_output.log

如果command4从标准输入获取输入,您甚至可以:

ssh login@machine_with_lots_of_ram "~/script_that_needs_ram.sh" | command4

相关内容