如何通过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}.){3}[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}.){3}[0-9]{1,3}b" | grep "10.*"`

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

应该在~/.bashrc中插入/更新吗?如果是的话,难道不会有重复的私人专线吗?

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

您可以检查您的PATH吗?
您正在调用程序ip,awkgrep.
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中是已知的(并且在脚本完成时被遗忘)。

相关内容

  • 没有找到相关文章

最新更新