【发布时间】:2021-05-16 15:23:49
【问题描述】:
我对 shell 脚本相当陌生,所以我很难将类似问题的答案应用于我的问题。
我正在尝试通过 ssh 连接到远程服务器,执行多个 awk 命令,并将每个命令的值返回到本地 .txt 文件。我也在尝试 ssh 到其他服务器,执行类似的命令,并将它们返回到同一个文本文件。
如果我手动 ssh 进入远程服务器并运行df -h | awk '$6 == "/" {print $5; exit},我会从 df -h 命令获得根目录的 % used 值。
到目前为止,我有以下内容,但是当它进入和退出远程服务器时,它不会保存值。
> testfile.txt
ssh {$CURRENT_ENV} << EOF
VAL=\$(df -h | awk '\$6 == "/" {print \$5; exit}')
echo "\$VAL > testfile.txt"
exit
EOF
我查看了单行 awk 返回,但由于我有多个命令要运行,它似乎不是最优的。如有任何建议,我将不胜感激!
【问题讨论】:
-
关于
I have multiple commands to run- 我强烈建议您只运行需要在远程机器上运行的最少命令,并在本地运行其余命令,以实现稳健性、易于维护等。例如,在这种情况下,您可以使用ssh 'df' | awk而不是ssh 'df | awk'。然后,例如,如果您必须对其进行调试,您可以将其调整为ssh 'df' | tee file | awk以创建df输出的本地副本 - 如果您的起点是ssh 'df | awk',则通常会有更有效的更改。 -
所以当你说
I am trying to ssh to a remote server, perform multiple awk commands, and return the value of each to a local .txt file- 我建议你不要那样做。而是 ssh 到远程服务器,执行收集所需数据所需的绝对最少命令,将该数据保存到本地服务器,然后在本地数据副本上执行多个 awk 命令并返回每个值到本地 .txt 文件。当然要考虑客户对允许的数据传输(如果适用)和数据传输大小/速率的要求。
标签: bash shell awk ssh scripting