捕获多行ssh命令的输出

丹尼尔

我想计算远程服务器上给定类型的文件数。为此,我需要ssh并运行命令以对远程服务器上的文件进行计数,然后以某种方式返回该值。我考虑过仅打印值并尝试捕获该输出

到目前为止,我有:

START=0
LAST=5
ssh -i $KEY $USERNAME@$HOST << EOF

  N_FILES=0;
  for (( d=$START; d<=$LAST; d++ ))
  do
        check_day=`date +"%Y-%m-%d" -d "$d day ago"`

        FILES_FOUND="\$(find &DIR | grep $check_day | wc -l)"

        N_FILES=\$(( \$N_FILES + \$FILES_FOUND ))

  done
  echo $N_FILES

EOF
N_FILES=$?

上面的代码运行正常,但是当在服务器中实际发现有文件以这种方式捕获输出时,结果为0。有人可以帮忙吗?

您可以简单地将SSH命令的结果分配给一个变量:

IFS="" N_FILES=$(ssh -Ti $KEY $USERNAME@$HOST << EOF

  N_FILES=0;
  for (( d=$START; d<=$LAST; d++ ))
  do
        check_day=`date +"%Y-%m-%d" -d "$d day ago"`

        FILES_FOUND="\$(find &DIR | grep $check_day | wc -l)"

        N_FILES=\$(( \$N_FILES + \$FILES_FOUND ))

  done
  echo $N_FILES

EOF
)
echo $N_FILES

注意:N_FILESbefore sshN_FILES与ssh命令中使用的命令不同。
但是它的值(假设其他ssh命令都没有任何输出)将相同。

-T这里似乎很重要:无需请求伪TTY将输出分配给变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章