如何解决如何通过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
吗?
您正在调用程序 ip
、awk
和 grep
。
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 举报,一经查实,本站将立刻删除。