【问题标题】:Random password variable disappears随机密码变量消失
【发布时间】:2010-05-06 14:53:48
【问题描述】:

我正在使用以下内容在 shell 脚本中生成随机密码:

DBPASS=</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 8)

当我像这样在一个文件中运行它时:

#!/bin/sh
DBPASS=</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 8)
echo $DBPASS

回显密码。当我将它合并到一个更大的脚本中时,尽管由于某种原因似乎从未创建变量,

所以例如这不起作用(旧密码字符串被替换为空):

DBPASS=</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 8)
sed -i s/oldpass/$DBPASS/ mysql_connect.php

如果我手动设置变量,尽管一切都很好。我必须承认我不完全确定密码是如何生成的。如果有助于澄清问题可能是什么,此脚本包含在 postwwwact cPanel 脚本中

谁能看出问题出在哪里?

【问题讨论】:

  • 你可能只想看看apg

标签: linux bash shell


【解决方案1】:

$1 计算结果为 null(未设置)时,第二个 head 运行,它就是输出字符串的内容。 echo 不是因为 $DBPASS 为空。您需要使用命令替换将输出放入变量中:

DBPASS=$(</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 8))

另外,由于第一个head 被重定向到/dev/null,如果$1 不为空,则不会输出任何内容。你想让那个子句做什么?

如果您想要提供默认长度(如果没有作为参数提供),那么试试这个:

DBPASS=$(</dev/urandom tr -dc '[:alnum:]' | head -c ${1:-8} 2>&1)

我免费投了'[:alnum:]'

【讨论】:

  • 老实说这只是另一个开发者给我的sn-p,可以改进吗?
  • 谢谢,我基本上想要一个 8 个字符的随机密码,永远不会有参数传递给它。
  • 所以我猜是这样的:$(/urandom tr -dc '[:alnum:]' | head -c 8 2>&1)
猜你喜欢
  • 2017-05-20
  • 2011-09-05
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多