【发布时间】: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 的内容吗?