在 bash 中使用 /dev/random 分配一个具有 10 个字符长的随机字符串的变量?

Dan*_*s W 2 random variables bash cat

尝试创建一个 10 个字符的密码并将其分配给一个变量并将其回显到标准输出。

这是我到目前为止创建的脚本,但它不起作用。|我知道还有其他方法可以做到这一点,但当涉及超过 1 个步骤时,我从来没有真正擅长使用(管道)将信息从 1 个操作发送到另一个操作。

#!/bin/bash
tmp_pass=0
if [ $tmp_pass=0 ]; then
        tmp_pass=`cat /dev/random`
        tmp_pass=$(head tmp_pass -c 10 | base64)
        echo $tmp_pass
fi
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要的是这样的例子:

  1. 定义变量(例如 - tmp_pass
  2. 将变量设置为0
  3. 如果变量eq 0,则给它一个新的赋值
  4. 将以下结果分配给变量:
    1. 生成随机字符串
    2. 获取随机字符串的前 20 个字节
    3. 编码为base64
    4. 截取base64的前10个字符

注意:这在我上面的原始脚本中没有显示,但它确实看到它曾经使用echo filename(1:10)或类似的东西来限制它回显第 1 行的前 10 个字符。


我知道这可以用一行完成,但我不确定如何写出来,任何例子将不胜感激。

Rei*_*ase 5

这里的问题是您尝试使用 读取输入流cat /dev/random,它本身永远不会终止(与尝试执行的操作相同cat /dev/stdin)。你可以通过执行类似的操作来修复它

#!/bin/bash
tmp_pass=0
if [ $tmp_pass = 0 ]; then
        tmp_pass=`head -c 10 /dev/random | base64`
        echo "${tmp_pass:0:10}" #cut to 10 characters after base64 conversion
fi
Run Code Online (Sandbox Code Playgroud)