在我的笔记本电脑上,我经常在关闭系统完整性保护的情况下运行。 我有一份geek_script,显示了我需要了解的有关设置的许多信息。 它显示我的Mac序列号,操作系统的当前版本,MySQL是否正在运行,最新备份等。 我在脚本中添加了一行以显示系统完整性保护的状态。 从命令行,
csrutil status | grep --color "disabled"
做我想要生产的:
System Integrity Protection status: disabled.
禁用一词以红色突出显示。
在我的geek_script中,我用#!/bin/bash作为脚本的开头,以确保bash用于运行脚本,我有以下行:
echo '`csrutil status | grep --color "disabled"'
但是,禁用这个词没有颜色。 我尝试使用printf,\bin\echo等,正如各种谷歌搜索所建议的那样,但无济于事。
1)我怎样才能在geek_script中实现这种效果? 2)有人可以解释为什么会发生这种情况吗? 我知道命令行正在以 bash 执行,但脚本也应该在前面带有 #!/bin/bash,不是吗?
3)如果有更好的方法,请提出来。 我还有其他几个地方,如果"注意",我希望某些东西的状态是红色的,如果这是正常的,则为绿色。 例如,MySQL 正在运行[绿色],或 MySQL 已关闭[红色]。 此命令是:
#!/bin/bash
UP=$(pgrep mysqld | wc -l);
if [ $UP != 1 ];
then
echo "MYSQL is down.";
else
echo "MySQL is running.";
fi
在源自geek_scripts脚本的文件中。
提前感谢!
您可能希望更喜欢env bash shebang,因为它不依赖于可能会有所不同的bash路径,但是/usr/bin/env
命令始终存在。
#!/usr/bin/env bash
要在 grep 命令未在交互式 shell 中运行时保留其颜色输出,请使用--color=always
"查看 grep 手册页"选项。
-颜色[=时间], --颜色[=时间] 将匹配的(非空)字符串、匹配的行、上下文行、文件名、行号、字节偏移量和分隔符(对于字段和组 上下文线)和转义序列,以在终端上以彩色显示它们。颜色由环境变量GREP_COLORS定义。这 仍支持已弃用的环境变量GREP_COLOR,但其设置没有优先级。何时为从、始终或自动。
echo "$(csrutil status | grep --color=always "disabled")"
如果要控制颜色和突出显示,请使用知道代码的tput
命令从termcap
文件驱动终端,而不是硬编码 ANSI 转义序列。
#!/usr/bin/env bash
br="$(tput -S <<<$'setaf 1nboldn')" # Bold Red
bg="$(tput -S <<<$'setaf 2nboldn')" # Bold Green
ar="$(tput sgr0)" # Text attributes reset
echo "MYSQL is ${br}down${ar}."
echo "MySQL is ${bg}running${ar}."
经过大量的实验,感谢上帝提供了这些快速的处理器,我得到了这个工作:
> cat bin/mysql_monitor.sh
#!/bin/bash
UP=$(pgrep mysqld | wc -l);
if [ $UP != 1 ];
then
printf "MYSQL is 33[1;31mdown. 33[0mn";
else
printf "MySQL is 33[1;32mrunning. 33[0mn";
fi
#printf "`csrutil status | grep --color 'disabled'`n";
if csrutil status | grep 'disabled' &> /dev/null; then
printf "System Integrity Protection status: 33[1;31mdisabled 33[0mn";
else
printf "System Integrity Protection status: 33[1;32menabled 33[0mn";
fi
这会产生MySQL正在"运行"(绿色),或"禁用"(红色) 并打印出红色的"禁用"或绿色的"启用"。 转义码在不同的计算机上可能不同,但这些对我有用,来自:
https://misc.flogisoft.com/bash/tip_colors_and_formatting