[英]How to store --exclude arguments for grep in an environment variable in a bash script
[英]How to use one environment variable when calling a bash script repeatedly
我有一项任务是使用配额监控系统,如果监控结果超过配额,则发送警告电子邮件。 但是,在发出一封警告电子邮件后,应该在半小时内调用此监控程序,下次如果监控状态仍与上次相同,则无需再次发送相同的警告电子邮件。
为了做到这一点,我想利用环境变量来存储上次监视结果的状态,以便下次可以检查并且不会发送重复的电子邮件。 我的解决方案之一是在.bashrc
添加或更新export
语法,但为了激活更新的export
语法,我必须运行bash
,这可能是不必要的。
所以我想问有没有办法更新环境变量,这样每次调用监控程序Bash脚本时,它都会获得新的更新值?
将环境变量存储在不同的.file中,然后将源<.file>
这是一个使用heredoc的自包含解决方案。 乍一看它似乎是一个精心设计和不完美的解决方案,它确实有其用途,因为它具有弹性,并且在跨多台机器部署时效果很好,不需要对外部文件进行特殊监控或权限,最重要的是,没有不受欢迎的环境惊喜。
此示例使用bash ,但如果手动设置$thisfile
变量或其他方式,它将与sh一起使用。
此示例假定20
已作为mymonitorvalue
于脚本文件中,并使用参数$ 1作为概念证明。 您显然newval="$1"
更改为计算配额的任何内容:
#bash $>./script 10 Value from previous run was 20 Value from this test was 10 Updating value ... #bash $>./script 10 not doing anything ... result is the same as last time #bash $>
#!/bin/bash
thisfile="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ; thisfile="${DIR}${0}"
read -d '' currentvalue <<'EOF'
mymonitorval=20
EOF
eval "$currentvalue"
function changeval () {
sed -E -i "s/(^mymonitorval\=)(.*)/mymonitorval\="$1"/g" "$thisfile"
}
newvalue="$1"
if [[ "$newvalue" != "$mymonitorval" ]]; then
echo "Value from previous run was $mymonitorval"
echo "Value from this test was "$1""
echo "Updating value ..."
changeval "$newvalue"
else
echo "not doing anything ... result is the same as last time"
fi
thisfile=
可以手动设置脚本位置。 此示例使用此处的自动解决方案: https : //stackoverflow.com/a/246128
read -d
... EOF
是保存在变量$currentvalue
的heredoc
在这种情况下, eval "$currentvalue"
相当于在终端中键入mymonitorval=10
function changeval...}
更新定界符到位的内容(它改变了物理.SH脚本文件)
newvalue="$1"
用于测试目的。 $newvalue
将由您计算配额的脚本决定
if....
block是要执行两组备用操作,具体取决于$newvalue
是否与上次相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.