我有一个循环,它将通过ssh连接到服务器来执行命令。我想保存该命令的输出。
o=$(ssh $s "$@")
这很好用。然后我可以用输出做我需要的东西。但是我有很多服务器要运行它,我试图通过后台ssh连接来加速这个过程,基本上是一次完成所有请求。如果我没有保存输出,我可以做类似的事情
ssh $s "$@" &
这很好用
我还没有能够得到正确的组合来做到这两点。
o=$(ssh $s "$@")&
这并没有给我任何输出。我试过的其他组合似乎试图执行输出。建议?
谢谢!
答案 0 :(得分:1)
进入后台的进程会获得自己的文件描述符副本。 stdout(o = ..)在调用进程中不可用。但是,您可以将stdout绑定到文件并访问该文件。
mkfifo testpipe
ssh $s "$@" >testpipe &
o=$(cat testpipe)
如果您不喜欢文件,也可以使用命名管道。这种'等待'是由'cat'命令完成的。管道可以重复使用,并且不占用磁盘上的空间。
"aggregations" : {
"agg" : {
"significant_terms" : {
"field" : "contents"
}
}
}
答案 1 :(得分:0)
我只想使用临时文件。您不能在后台进程中设置变量,并从启动它的shell访问它。
ssh "$s" "$@" > output.txt & ssh_pid=$!
...
wait "$ssh_pid"
o=$(<output.txt)