首页 > 解决方案 > 将远程主机的 < /dev/null 结果保存到文本文件中的本地计算机

问题描述

我有以下代码,它从远程主机检索数据并显示在本地机器显示器上。

if [ $(nc -z 192.168.80.180 22; echo $?) -eq 0 ]; then
ssh root@$192.168.80.180 'df -h; free -m' < /dev/null
echo /dev/null | cat - $var.txt
fi

如何捕获结果并保存到文件中,我尝试了 echo 但它没有用。

谢谢你

标签: bashscripting

解决方案


< /dev/null

将过程标准输出与/dev/null文件绑定。

保存 < /dev/null 结果...

/dev/null是一个文件,不会产生结果。

ssh root@$192.168.80.180 'df -h; free -m' < /dev/null

使用指定参数运行ssh命令并将其标准输入与/dev/null.

/dev/null是一个魔术文件。它的大小总是为零。你可以给它写任何东西。它的大小仍然为零。你不能从中读出任何东西。因为它的大小始终为零。表达式< /dev/zero用于“关闭”命令标准输入。

为了保存它在标准输出上产生的进程输出,您可以使用命令替换

var=$(ssh root@$192.168.80.180 'df -h; free -m' < /dev/null)

或者您可以通过将其与文件绑定来保存进程的标准输出:

ssh root@$192.168.80.180 'df -h; free -m' < /dev/null > result.txt

您可以阅读有关 bash重定向的更多信息。

线

if [ $(nc -z 192.168.80.180 22; echo $?) -eq 0 ]; then

很奇怪。只是:

if nc -z 192.168.80.180 22; then

如果命令返回零状态,if则表达式为真。将命令返回状态与零进行比较[ $(command; echo $?) -eq 0 ]很奇怪。

更多关于if

也总是引用任何扩展(除非你知道你不需要)。所以引用命令替换[ "$(nc -z ...; echo $?)" -eq 0 ]


推荐阅读