微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过cronjob将输出永久导出为环境变量?

如何解决如何通过cronjob将输出永久导出为环境变量?

每当我在终端中运行它时:

export PRIVATEIP=`ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep "10.*"`

它从命令中导出值

ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\b" | grep "10.*"

因此,当我在脚本中调用 $PRIVATEIP 时,将获取 IP 号。

现在我想将此命令作为 cronjob 运行,因为 IP 会定期更改。此导出需要对运行 $PRIVATEIP 的每个人/任何地方永久可用。

这是我的 crontab 中的内容

* * * * * /bin/bash /home/scriptfolder/script.sh

这是 script.sh 的样子:

#!/bin/bash
PATH=/usr/bin:/home/scriptfolder
export PRIVATEIP=`ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\b" | grep "10.*"`

谁能告诉我为什么它不能按我想要的方式工作?每当我在激活此 cronjob 后在终端中运行 $PRIVATEIP 时,它显然不会导出(或显示*)当前 ip。

是否应该在 ~/.bashrc 中插入/更新?如果是,那么会不会有重复的 PRIVATEIP 行?

希望你能理解我糟糕的英文和凌乱的文字。我是 Linux 新手,欢迎所有帮助。

解决方法

你能检查一下你的PATH吗?
您正在调用程序 ipawkgrep
Bash 会查看路径来寻找程序的位置,所以它只会在 /usr/bin/home/scriptfolder 中查找。
他们在哪里?

command -v ip
command -v awk
command -v grep
# when command -v grep shows an alias,try
which grep

更改您的 PATH 以匹配程序的位置。

#!/bin/bash
PATH=/usr/bin:/sbin:/bin:/home/scriptfolder

更难的方法是使用完整路径调用所有程序:

export PRIVATEIP=$(/sbin/ip address show |
   /usr/bin/awk '{print $2}' | 
   /bin/grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" |
   grep "10.*")

现在 PRIVATEIP/home/scriptfolder/script.sh 中是已知的(脚本完成后忘记了)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。