我想通过运行特定脚本(例如 )来测试正在开发的软件script file.ext
。但我被告知,如果配置文件(例如file.conf
)包含表明系统处于生产模式的特定字符串(不是带有前导 # 的注释),则不允许我运行该脚本。
所以在 bash 中,我怎样才能做类似的事情
如果file1.conf
包含一个字符串in production
并且该字符串不是以下形式, something ... # something in production something
则执行script file1.ext
。
in production
或者,每次指定文件包含 string而不是注释时,我是否可以以某种方式收到警报?
我想我需要以某种方式使用该命令inotifywait
。如果有一个脚本不仅可以检查文件file1.conf
,而且每次带有扩展名的文件.conf
显示我处于生产模式时都会发出警报,这也很好。
答案1
实现这一目标的一种方法是使用grep
,例如
grep "^[^#]* in production " file.conf || script file.ext
||
仅当其前面的部分不存在且退出代码为 0 且grep
仅当找到其模式(第一个参数)时退出代码为 0 时,才会执行后面的部分。
我选择了一个简单的图案"^[^#]* in production "
。该字符^
代表行的开头,[^#]
代表任何字符,但#
量词*
表示可以有任意数量的字符。模式的其余部分只是您希望标记生产模式的文本。
为了避免grep
产生所有输出,您可以将其发送到/dev/null
:
grep "^[^#]* in production " file.conf > /dev/null || script file.ext
如果您想打印一条消息,如果您处于生产模式并且脚本未运行,您可以这样做
grep "^[^#]* in production " file.conf > /dev/null && \
echo "We are in production mode. The script was not run." || \
script file.ext