【问题标题】:How to set awk/grep output as enviromental variable?如何将 awk/grep 输出设置为环境变量?
【发布时间】: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。然后脚本终止,其环境被丢弃。
  • 感谢您的解释,这帮助了我缓慢的大脑。但是我应该怎么做才能让它在所有环境中永久可用?

标签: bash shell scripting cron


【解决方案1】:
export PRIVATEIP=$( ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep "10.*" )

或

export PRIVATEIP=`ip address show | awk '{print $2}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep "10.*"`

【讨论】:

  • 该死的。因此,它在手动运行时有效,但在将其作为 cronjob 或命令本身或 bash /path/to/ipscript.sh 时无效?有什么想法吗?
  • 大多数情况下需要指定完整路径,或者在crontab文件的顶部设置PATH。这是因为 cronjob 环境非常小,默认情况下只使用您在交互式 shell 中看到的 PATH 的一个子集。
  • PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/scriptfolder 是这个吗?我把它放在我的 script.sh 中。在 PATH 行的末尾添加了 /home/scriptfolder。然后通过 cronjob /bin/bash /home/scriptfolder/script.sh 调用它仍然无法正常工作。对不起,我是新手。
  • 此路径中的所有可执行文件:ip、awk、grep?你所说的“不工作”是什么意思——你得到了什么错误信息?
  • 哈哈!我100%迷路了。我通过谷歌找到了这个。我认为,通过您的问题,我了解 PATH 的目的。这个脚本只使用ip, awk and grep,据我所知,/usr/bin 都可以使用。我的脚本在/home/scriptfolder/script.sh 中可用...所以#!/bin/bash 下方的简单“PATH=/usr/bin:/home/scriptfolder”不应该解决问题吗?不工作的是 cronjob 正在运行并导出到 $PRIVATEIP。我只能让它在终端中手动工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2022-08-08
  • 2012-08-12
  • 2011-02-13
  • 2018-09-25
  • 2011-12-30
相关资源
最近更新 更多