我有一个看起来有点像这样的脚本:
command1
command2
ssh login@machine_with_lots_of_ram:~/script_that_needs_ram.sh
command4 output_file_from_above
Run Code Online (Sandbox Code Playgroud)
其中命令 4 需要 ssh 命令的输出。
如何告诉程序等待 ssh 脚本完成后再继续?或者更好的是,如何在命令 1 之后设置在远程计算机上运行的 ssh 脚本并让程序从运行命令 4 直到它完成?
直到命令(脚本)在远程服务器上完成执行后,SSH 会话才会退出。
根据脚本是将数据输出到服务器上的文件还是将数据输出到标准输出,您可以执行以下两种操作之一。
如果它将数据输出到服务器上的文件:
ssh user@host script.sh
scp user@host:remote_output local_output
process_output local_output
Run Code Online (Sandbox Code Playgroud)
这基本上用于scp将数据从服务器复制到本地机器。
如果它输出数据到标准输出:
ssh user@host script.sh >local_output
process_output local_output
Run Code Online (Sandbox Code Playgroud)
这会将脚本的标准输出重定向到本地文件。
设置程序先运行然后等待:
ssh user@host script.sh &
# do other stuff
wait
scp user@host:remote_output local_output
process_output local_output
Run Code Online (Sandbox Code Playgroud)
或者
ssh user@host script.sh >local_output &
# do other stuff
wait
process_output local_output
Run Code Online (Sandbox Code Playgroud)
在wait将暂停脚本,直到ssh命令(运行作为后台进程)退出。
如果您需要捕获远程命令的输出,类似这样的操作应该有效:
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
Run Code Online (Sandbox Code Playgroud)
如果command4从标准输入获取输入,您甚至可以:
ssh login@machine_with_lots_of_ram "~/script_that_needs_ram.sh" | command4
Run Code Online (Sandbox Code Playgroud)