我目前正在编写一个脚本,用于自动设置一个使用ftp和apache的新服务器,但我不想写下他们应该使用的密码,所以我想用当前行生成它。
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12
然而,当我把它放在变量中时它似乎不起作用:
PASSGEN="< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12"
FTPPASS=$(eval $PASSGEN)
DBPASS=$(eval $PASSGEN)
echo $FTPPASS
如果我更改if PASSGEN字符串是日期工作正常。有没有什么我错过了完整的?
答案 0 :(得分:2)
您在变量名称($
)前面缺少$PASSGEN
,因为您首先想要变量扩展:
FTPPASS=$(eval "$PASSGEN")
同样使用全大写变量名称对于用户定义的变量不是一个好主意,因为它们通常用于环境变量。根据您的环境,将密码保存在变量中也许不是一个好主意。
修改强>
我建议您使用命令替换$()
,而不需要eval
:
$ PASSGEN=$(</dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12)
$ echo $PASSGEN
zT52YgWXoXcW
答案 1 :(得分:0)
当您使用某个功能时,您正在使用变量。
passgen () {
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12
}
ftp_pass=$(passgen)
db_pass=$(passgen)
echo "$ftp_pass"
echo "$db_pass"