Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 捕获多行ssh命令的输出_Bash_Ssh - Fatal编程技术网

Bash 捕获多行ssh命令的输出

Bash 捕获多行ssh命令的输出,bash,ssh,Bash,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 &

我想计算远程服务器上给定类型的文件数。为此,我需要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=$?

START=0
最后一次=5

ssh-i$KEY$USERNAME@$HOST您只需将ssh命令的结果分配给一个变量:


IFS=”“N_FILES=$(ssh-Ti$KEY$USERNAME@$HOST您只需将ssh命令的结果分配给一个变量:


IFS=”“N\u文件=$(ssh-Ti$KEY$USERNAME@$HOST
$?
是最后一个命令的退出代码,而不是捕获的输出。您的脚本将始终成功退出,因此它将始终为0。您需要在here文档中转义大量的
$
字符和反勾号,以便它们在通过
ssh发送之前不会在本地系统上展开
。要调试此功能,请尝试将
ssh-i$KEY$USERNAME@$HOST
替换为
cat
,以查看实际发送到远程系统的内容。哦,几乎可以肯定,有一种更好的方法来检查过去五天,而不是扫描和搜索五次。日期是文件名的一部分吗?
$?
是退出密码吗最后一个命令的e,而不是捕获的输出。您的脚本将始终成功退出,因此它将始终为0。您需要在here文档中转义大量的
$
字符和反勾号,以便它们在通过
ssh
发送之前不会在本地系统上展开。若要调试此脚本,请尝试替换
ssh-i$KEY$USER用
cat
命名@$HOST
以查看实际发送到远程系统的内容。哦,几乎可以肯定,有一种更好的方法来检查过去五天,而不是扫描和放大五次。日期是文件名的一部分还是什么?嗨,谢谢你的回答。我尝试了,但不幸的是它不起作用。什么都没有似乎是从ssh命令返回的。为了调试它,我将代码简化为``N_FILES=$(ssh-I$KEY$USERNAME@$HOST@daniel First,不要忘记
IFS=“”
在命令之前,获取换行符。其次,在SSH命令中添加一个-T
SSH-Ti…
。好的,它成功了!非常感谢Hi VonC,谢谢你的回答。我尝试了它,但不幸的是它不起作用。SSH命令似乎没有返回任何内容。为了调试它,我将代码简化为``N\u文件=$(ssh-i$KEY$USERNAME@$HOST@daniel首先,不要忘记命令前的
IFS=”“
,以获取换行符。其次,将a-t添加到ssh命令
ssh-Ti…
。好的,成功了!非常感谢