我写了一个小 Bash 脚本,spfquery
用于检查我的域电子邮件 SPF 记录,如果它传递了所有提供商的 IP 地址:
#!/bin/bash
# RED="\033[1;31m"
GREEN="\033[1;32m"
NOCOLOR="\033[0m"
email="[my email address]" # deleted for bots not to hound me
declare -a ips=("88.86.120.212" "88.86.120.223" "88.86.120.250" "88.86.120.213" "88.86.120.103" "46.234.104.23" "46.234.104.24")
echo -e "\n\n"
for ip in "${ips[@]}"
do
echo -e "${GREEN}$ip${NOCOLOR}"
spfquery -sender $email -ip $ip -helo kolbaba.stable.cz
echo -e "\n\n"
done
注意,有RED
注释掉。那是因为我希望生成的消息以以下任何一个开头:
fail
softfail
neutral
unknown
error
none
即不与:
pass
以红色着色。
但如何做到这一点对我来说是个谜?
用
zsh
而不是bash
:print -P
打开参数的提示扩展where%F{color}
is 设置前景色并%f
重置它。请注意,那里 (
$color
和$ip
) 中的变量的内容也会受到即时扩展(在它们可能包含字符的情况下要记住这一点%
(如果promptsubst
启用该选项,则要记住更多))和转义序列(\n
如上)扩展.其他访问颜色的方法
zsh
:colors
自动加载功能:参数扩展标志,它可以对
%
变量的内容进行快速扩展:也可以看看:
或更好
保证内容按
$text
原样输出。zsh/curses
用于在终端中编写伪图形应用程序的模块。您可能想检查 spfquery 的退出代码,然后使用 if/else 来查看它是否通过。像这样的东西:
您的问题表明您想为命令生成的输出
spfquery
着色。这不是通过运行命令然后发出颜色更改控制序列来实现的。您通过其他答案实现的只是为 IP 地址着色。这可能是您想要的,但这不是您的问题所要求的。如果这是您真正想要做的,您正在寻找的工具是各种着色过滤器实用程序,例如István Karaszi 的
colorize
、Radovan Garabík 的grc
和Joakim Andersson 的colortail
。配置它们以识别适当的事物,然后通过它们管道输出spfquery
,甚至整个for
循环。进一步阅读