在变量中的bash存储中生成密码

时间:2016-10-30 05:02:12

标签: bash

我目前正在编写一个脚本,用于自动设置一个使用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字符串是日期工作正常。有没有什么我错过了完整的?

2 个答案:

答案 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"