shell脚本来ssh远程机器并打印top命令的输出

use*_*564 6 unix ssh bash shell echo

我想写一个shell脚本来做以下四件事:

  1. ssh远程机器(比如hosti)
  2. 将机器名称打印到文件(top_out)
  3. 将'top'命令输出的前几行打印到与step2相同的文件中
  4. 对另一台机器重复1-3

我试过这个:

#! /bin/bash

for i in 1 2 3 4 5 6 7 8

do
    echo "host$i" >> ~/mysh/top_out
    ssh host$i "top -n1 -b | head -n 15>> ~/mysh/top_out"
    echo "done"
done
Run Code Online (Sandbox Code Playgroud)

我得到的输出文件保存了一些机器的最高输出(比如host5-8),但是对于像host1-4这样的早期机器人来说它是空白的.如果我尝试没有"echo"主机$ i">>〜/ mysh/top_out",我可以得到所有host1-8的最高输出.

and*_*otn 7

当你这样做

ssh host$i "top -n1 -b | head -n 15>> ~/mysh/top_out"
Run Code Online (Sandbox Code Playgroud)

您将输出写入~/mysh/top_out远程主机,而不是本地计算机.远程主机可能没有使用与本地计算机相同的物理主目录.如果您在某些计算机上拥有NFS或共享主目录但不是全部共享主目录,那么您将看到所描述的症状.

试着做

ssh host$i "top -n1 -b | head -n 15" >> ~/mysh/top_out
Run Code Online (Sandbox Code Playgroud)

相反,或者使事情略微清洁,甚至可能

#!/bin/bash

for i in $(seq 1 8); do
    (echo "host$i"
     ssh host$i "top -n1 -b | head -n 15") >> ~/mysh/top_out
    echo "done host$i"
done
Run Code Online (Sandbox Code Playgroud)