Cron正在从shell脚本的环境变量中删除$字符

c2e8gylq  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(170)

我在一个docker容器中有一个环境变量,它存储了一个带有特殊字符的密码。这个特殊的密码中包含一个$。我在一个shell脚本中输出了这个环境变量。如果我手动运行这个脚本,一切都很好。当cron运行这个脚本时,$和后面的两个字符被删除了。我尝试过用几种方法转义特殊字符,下面是最新的一个,但是结果是一样的(手动很好,cron没有)。对于这个例子,假设密码是blahblah$xy*blahblah,这是我在运行脚本时看到的。如果cron运行脚本,我会得到blahblah*blahblah
我的脚本(testVars.sh):

#!/bin/bash

echo "Testing variables"

MY_PASS=$MY_PASSWORD
TEST_PASS=$(sed -e 's/[^a-zA-Z0-9,._+@%/-]/\\&/g; 1{$s/^$/""/}; 1!s/^/"/; $!s/$/"/' <<< $MY_PASSWORD)

echo ${MY_PASS}
echo ${TEST_PASS}

我的cron:

BASH_ENV=/root/env_vars.sh
33 13 * * * root /opt/testVars.sh >> /opt/cron.log

我假设字符串中实际上可以用这种方式包含$符号。

vnzz0bqm

vnzz0bqm1#

我通过在printenv文件中添加以下内容来解决这个问题,就在我的printenv命令之前:
export MY_PASSWORD=$(sed -e 's/[^a-zA-Z0-9,._+@%/-]/\\&/g; 1{$s/^$/""/}; 1!s/^/"/; $!s/$/"/' <<<"$MY_PASSWORD")
感谢Ture Pålsson为我指明了正确的方向。

相关问题