我试图在另一个shell脚本中使用perl命令替换文件的内容:
文件名:INFA.param
内容:
$ParamUser=SOMEUSERNAME
$ParamPswd=SOMEPASSWORD
$$StartTime=2021-06-26 08:31:51:1195079
$$EndTime=2021-06-26 09:31:51:1195079
当我在另一个shell脚本“www.example.com”中打开上述文件pp.sh时
cat INFA.param > temp.param
. ./temp.param
pmcmdpassword=$(pmcmd $password -e CRYPTDATA)
perl -pe -e "s#ParamPswd=\Q$ParamPswd\E#ParamPswd=$pmcmdpassword#g" INFA.param
我得到了一些错误:
=SOMEUSERNAME: not found
=SOMEPASSWORD: not found
31850942StartTime=2021-06-26 08:31:51:1195079: not found
31850942EndTime=2021-06-26 09:31:51:1195079: not found
你能建议我如何更换密码吗?
2条答案
按热度按时间frebpwbc1#
只有当文件被写入为有效的shell源代码时,才可以安全地使用
.
或source
。你这里的文件不是这样的:shell赋值不以$
开头。如果您试图通过重新加密来修改现有的密码,这就是为什么您的代码试图将原始文件读入shell解释器,那么您可能需要:
如果您输入新密码,则会更容易;那么你根本就不需要读取原始文件:
kzmpq1sx2#
您正在执行以下
bash
脚本:与Perl不同,bash只使用
$
来扩展变量。例如:在bash中给出:
当脚本启动时,bash变量
ParamUser
为空,因此$ParamUser=SOMEUSERNAME
行将扩展为=SOMEUSERNAME
。这不是一个有效的命令,因此bash会抱怨对于bash
包含多个不同的问题,其中间距。此外,
$$
扩展到当前进程的PID,显然是31850942。所以,解决办法是
(same其余的)
请注意,行
使用了一个变量
password
,该变量未在问题的脚本部分中设置。