【问题标题】:How to export output as enviromental variable permanently via cronjob?如何通过 cronjob 将输出永久导出为环境变量?
【发布时间】:2021-05-28 01:22:03
【问题描述】:

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

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 中插入/更新?如果是,那么会不会有重复的 PRIVATEIP 行?

希望你能理解我糟糕的英语和凌乱的文字。我是 Linux 新手,欢迎大家提供帮助。

【问题讨论】:

  • 环境只被子进程继承。在 cron 作业中导出不会对不是该 cron 作业后代的其他进程产生任何影响。,
  • 更好的解决方案是将其写入 cronjob 中的文件,而不是在脚本中使用 $(<filename)
  • 哈哈,你说的时候听起来很简单=D我想我明白了。但我不确定我将运行的脚本/软件是否支持 $(
  • 比较通用的是$(cat filename)
  • --p2p-local-ip $(cat /home/scriptfolder/privateip.txt) --second-command X --third-command Y 怎么了=D? ......... 这是系统文件的 ExecStart=/ 变量。知道为什么它不会读取 privateip.txt 的内容吗?

标签: bash shell scripting cron


【解决方案1】:

你能查一下你的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 中是已知的(脚本完成后忘记了)。

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多