在后台连接时捕获 bash 脚本中的 ssh 输出



我有一个循环,它将通过ssh连接到服务器以执行命令。我想保存该命令的输出。

o=$(ssh $s "$@")

这工作正常。然后,我可以用输出做我需要的事情。但是,我有很多服务器可以运行它,我正在尝试通过后台连接来加快该过程,基本上是一次完成所有请求。如果我不保存输出,我可以做类似的事情

ssh $s "$@" &

这工作正常

我一直无法获得正确的组合来同时执行这两项操作。

o=$(ssh $s "$@")&

这不会给我任何输出。我尝试过的其他组合似乎试图执行输出。建议?

谢谢!

进入后台的进程会获得自己的文件描述符副本。标准输出 (o=..( 在调用过程中将不可用。但是,您可以将标准输出绑定到文件并访问该文件。

ssh $s "$@" >outfile &
wait
o=$(cat outfile)

如果不喜欢文件,也可以使用命名管道。这样,"等待"由"cat"命令完成。管道可以重复使用,并且不占用磁盘上的空间。

mkfifo testpipe
ssh $s "$@" >testpipe &
o=$(cat testpipe)

我只会使用一个临时文件。不能在后台进程中设置变量并从启动它的 shell 访问它。

ssh "$s" "$@" > output.txt & ssh_pid=$!
...
wait "$ssh_pid"
o=$(<output.txt)

最新更新