我有一个看起来有点像这样的脚本:
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 会话不会退出。
根据脚本是将数据输出到服务器上的文件还是将数据输出到标准输出,您可以执行以下两种操作之一。
如果它将数据输出到服务器上的文件:
ssh user@host script.sh scp user@host:remote_output local_output process_output local_output
这基本上用于
scp
将数据从服务器复制到本地计算机。如果将数据输出到标准输出:
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