我正在尝试在远程主机的日志文件中查找字符串。但我无法将回显返回到运行脚本的主机。
#!/bin/bash
#dt=$(date +"%Y%m%d")
#HHMM=$(date '+%H:%M')
key="keys/cash_prod_key"
if
ssh -o StrictHostKeyChecking=no -qni $key user@host "cat /var/log/FILE_send.log | grep FILENAME | grep -i success"\;
then
echo "Success"
fi
我认为这不是最正确的方法。
答案1
问题是主机名不正确。
这个答案的重点是如何以更好的方式编写代码。
您不需要在远程主机上运行完整的管道。在命令行上运行复杂的命令ssh
很容易出错,尤其是从引用的角度来看。
反而:
#!/bin/bash
key="keys/cash_prod_key"
ssh_args=( -o StrictHostKeyChecking=no -qni "$key" user@host )
if ssh "${ssh_args[@]}" cat /var/log/FILE_send.log |
grep -F 'FILENAME' |
grep -q -i -F 'success'
then
echo 'Success'
fi
这将仅cat
在远程主机上运行,然后grep
在本地运行这两个命令。
我还将-F
标志添加到grep
命令中,假设用作模式的字符串是不是正则表达式,但您要搜索的文字字符串。最后的grep
用途-q
,因为我们实际上并不感兴趣看到输出,只是看它是否包含字符串success
。
为了更容易阅读,我将使用的参数放入ssh
一个数组中,以便稍后在调用中使用,并且我还通过在管道符号后插入换行符来使行稍微短一些。该脚本在语法上仍然是正确的。另请注意,变量等的任何扩展都应始终用双引号引起来,除非您知道在什么上下文中这不是必需的。
请注意,我假设该ssh
命令是以正确的方式调用的。