gpt4 book ai didi

linux - bash 中的 grep 语句

转载 作者:太空宇宙 更新时间:2023-11-04 10:45:58 26 4
gpt4 key购买 nike

我正在使用 for 循环连接到服务器列表并执行一些简单的命令。如果服务器不可访问,则将 stderr 写入文件。然后我 grep 该文件以获取服务器名称。它看起来相对简单,并且由于某种原因它不起作用。出于故障排除目的,我已将我的服务器列表缩小到两台服务器,并且只运行简单的命令。

for i in $(cat serverlist)
do
nexec -i $i hostname 2>>errorlog.txt
if grep -q $i errorlog.txt; then echo "error accessing" $i
else echo "was able to connect to" $i
fi
done

因此在服务器列表中我定义了两个错误的主机以用于故障排除。 Nexec 尝试连​​接到每个并执行主机名命令。如果无法连接,错误消息将打印到 errorlog.txt

例如,nexec: 访问主机 test1 时出错

由于两个服务器都被错误指定,我无法连接到任何一个。再次用于故障排除目的。

当 grep 第一次针对列表中的第一个服务器 $i 运行时,它在 error.txt 中找不到任何匹配项。然而,它应该。如果我 cat 结果而不是 grepping 它就在那里。

我实际上是在 bladelogic 中这样做的,所以规则有点不同。它应该仍然有效。

最佳答案

while read -r i <&3; do
nexec -i "$i" hostname 2>>"errorlog.$i.txt" || {
echo "nexec for $i exited with status $?" >&2
continue
}
# check for case where it claimed success but actually failed
# if nexec is written correctly, you don't need any of this logic
# ...and can completely remove the rest of the loop.
if grep -q -e "$i" "errorlog.$i.txt"; then
echo "error accessing $i" >&2
else
echo "was able to connect to $i" >&2
fi
done 3<serverlist

# and combine all the individual logs into one file:
cat errorlog.*.txt >errorlog.txt && rm -f -- errorlog.*.txt

关于linux - bash 中的 grep 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33111151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com