我有以下代码,该代码从远程主机检索数据并显示在本地计算机显示屏上。
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但没有用。
谢谢
答案 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 ]
。