Bash 捕获多行ssh命令的输出
我想计算远程服务器上给定类型的文件数。为此,我需要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 &
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命令中添加一个-TSSH-Ti…
。好的,它成功了!非常感谢Hi VonC,谢谢你的回答。我尝试了它,但不幸的是它不起作用。SSH命令似乎没有返回任何内容。为了调试它,我将代码简化为``N\u文件=$(ssh-i$KEY$USERNAME@$HOST@daniel首先,不要忘记命令前的IFS=”“
,以获取换行符。其次,将a-t添加到ssh命令ssh-Ti…
。好的,成功了!非常感谢