【发布时间】:2021-05-27 23:10:28
【问题描述】:
也许不是最好的命令,但它有效:
ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep "10.*"
这会输出以 10.* 开头的 IP,即: 10.71.179.60
我想要的是这个 IP 被设置为一个永久的环境变量(我认为它被称为) - 作为 $privateip
所以一个 cronjob 会每分钟运行一个包含这个的 bash 脚本:
ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep "10.*"
发送不时变化的IP,从命令变成:
export PRIVATEIP=*the output/IP of the above command*
所以每当我在脚本中运行 $PRIVATEIP 时,都会获取 IP :)。这必须是永久性的。
有人知道怎么做吗?!
编辑编辑编辑
Timur Shtatland 解决了这个问题:
export PRIVATEIP=`ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep "10.*"`
但不是我还有另一个问题:D。在终端中手动运行时,这非常有效。但是当我将它作为 cronjob 运行时,例如:
* * * * * export PRIVATEIP=`ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep "10.*"`
或
* * * * * bash /path/to/script.sh
其中包含
#!/bin/bash
export PRIVATEIP=`ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep "10.*"`
...它不起作用。有什么想法吗?!
【问题讨论】:
-
应该没有必要将 awk 通过管道传递给 grep,反之亦然。可以将 grep 组合到 awk 语句中,
-
环境变量不是这样工作的。如果您运行该 cron 作业,那么该脚本将愉快地运行并在其环境中分配 PRIVATEIP。然后脚本终止,其环境被丢弃。
-
感谢您的解释,这帮助了我缓慢的大脑。但是我应该怎么做才能让它在所有环境中永久可用?