当我在终端中运行这个代码时:
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
中插入/更新吗?如果是的话,难道不会有重复的私人专线吗?
希望你能理解我糟糕的英语和凌乱的文字。对于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
中是已知的(并且在脚本完成时被遗忘)。