gpt4 book ai didi

linux - 重复调用bash脚本时如何使用一个环境变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:31 25 4
gpt4 key购买 nike

我有一个任务是监控有配额的系统,如果监控结果超过配额,发送警告邮件。但是这个监控程序应该半小时调用一次,发出一封警告邮件后,下次如果监控到的状态和上次一样,就不需要再次发送同样的警告邮件。

为了做到这一点,我想利用环境变量来存储上次监控结果的状态,以便下次检查时不会发送重复的电子邮件。我的解决方案之一是在 .bashrc 中添加或更新 export 语法,但为了激活更新的 export 语法,我必须运行 bash,这可能是不必要的。

所以我想问一下,有没有什么办法可以更新环境变量,以便每次调用监控程序 Bash 脚本时,它都能获得最新的更新值?

最佳答案

这是一个使用 heredoc 的独立解决方案。乍一看,它似乎是一个精心设计且不完美的解决方案,但它确实有它的用途,因为它具有弹性,并且在多台机器上部署时效果很好,不需要特殊的监控或外部文件的权限,最重要的是,没有环境意外意外。

此示例使用 bash,但如果手动设置 $thisfile 变量或以其他方式设置,它将与 sh 一起使用。

此示例假定 20 已作为 mymonitorvalue 在脚本文件中,并使用参数 $1 作为概念证明。您显然会将 newval="$1" 更改为计算配额的任何值:


示例用法:

#bash $>./script 10Value from previous run was 20Value from this test was 10Updating value ...#bash $>./script 10not doing anything ... result is the same as last time#bash $>

Script:

#!/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... 更新 heredoc 的内容就地(它更改物理 .sh 脚本文件)

newvalue="$1" 用于测试目的。 $newvalue 将由计算配额的脚本决定

if.... block 根据 $newvalue 是否与上次相同来执行两组交替操作。

关于linux - 重复调用bash脚本时如何使用一个环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39245903/

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