将远程主机的</dev / null结果保存到文本文件中

时间:2018-11-27 20:58:17

标签: bash scripting

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

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但没有用。

谢谢

1 个答案:

答案 0 :(得分:1)

< /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用于“关闭”命令标准输入。

要保存由标准输出产生的过程输出,可以使用command substitution

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 redirections的更多信息。

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

很奇怪。只是:

if nc -z 192.168.80.180 22; then

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

有关if的更多信息。

也总是引用任何扩展名(除非您知道不必这样做)。因此,引用命令替换[ "$(nc -z ...; echo $?)" -eq 0 ]