我在 docker 容器中有一個環境變數,用于存盤帶有特殊字符的密碼。這個特定的密碼中包含一個 $。我在 shell 腳本中輸出這個環境變數。如果我手動運行腳本,一切都很好。當 cron 運行腳本時,會洗掉 $ 和以下 2 個字符。我嘗試以多種方式轉義特殊字符,最新的方法如下,但結果是相同的(手動正常,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}
我的計劃:
BASH_ENV=/root/env_vars.sh
33 13 * * * root /opt/testVars.sh >> /opt/cron.log
我假設實際上有可能以這種方式在字串中使用 $ 符號。
uj5u.com熱心網友回復:
我通過在檔案中添加以下內容來解決它docker-entrypoint.sh,就在我的printenv命令之前:
export MY_PASSWORD=$(sed -e 's/[^a-zA-Z0-9,._ @%/-]/\\&/g; 1{$s/^$/""/}; 1!s/^/"/; $!s/$/"/' <<<"$MY_PASSWORD")
感謝 Ture P?lsson 為我指明了正確的方向。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521147.html
標籤:重击壳cron环境变量
