通过SSH命令多行输出

通过SSH命令多行输出

我需要通过 SSH 远程命令进行多行输出。

如果我在本地计算机上使用此命令,我会得到正确的输出:

sudo docker stats --no-stream container1 container2 container3 | awk '{if (NR!=1) {print $1,$9,'$(date +%s)'}}'

container1 72.85 1471958776
container2 14.83 1471958776
container3 9.362 1471958776

如果远程启动,它会删除换行符:

ssh -o LogLevel=QUIET -t -i key.pem user@host sudo docker stats --no-stream container1 container2 container3 | awk '{if (NR!=1) {print $1,$9,'$(date +%s)'}}'

container1 72.85 1471957426 container2 14.83 1471957426 container3 9.362 1471957426

如何获得与本地输出相同的结果(每行一个)?

答案1

我相信这可能是由于-t的争论ssh。这会强制进行 tty 分配并请求终端输出:颜色、控制序列。但是,您不是在本地终端上显示输出(它知道如何执行此操作),而是将其通过管道传输到awk. (要准确了解您从 中获得的内容ssh,请使用cat -A代替awk。)您应该避免-t输出不是发往终端的情况,或者尝试清理隐藏的控制序列。后者比较难做到,所以我建议前者。

答案2

我用xargs命令解决了:

echo ${RESULTS} | xargs -n3

相关内容