skip to Main Content

I am trying to generate a random string of a certain length in Bash. This works in every other Bash shell I could test (Ubuntu 18.04 LTS and Debian 10)

$ cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 10 | head -n 1
n8a4wxvb01
$

cat /dev/urandom – endless stream of bytes

tr -dc ‘a-z0-9’ – only return lowercase characters and digits

fold -w 10 – break at 10 characters

head -n 1 – return the first line of the stream

In the Azure Cloud Shell Bash, this hangs. It returns the random string but never exits. The call to head -n 1 never exits after printing the value.

I have a work around but it seems backwards

head -n 10 /dev/urandom | tr -dc 'a-z0-9' | fold -w 10 | head -n 1

2

Answers


  1. The command works fine both in personal Linux OS and the Azure Cloud Shell Bash.

    Azure Cloud Shell Bash:

    enter image description here

    Personal Linux OS:

    enter image description here

    I don’t think there would be a difference between them. The Azure Cloud Shell is just a VM running on Ubuntu 16.04 LTS. Take a look at the features of the Azure Cloud Shell.

    Update:

    You can take a look at the issue, the answers probably show the reasons that the command does not work in Azure Cloud Shell. And as I know it is not a high performing system. Otherwise, use cat is not a good idea to get a random string. I suggest the head.

    Login or Signup to reply.
  2. I prefer using openssl for creating random strings (as hex or base64):

    openssl rand -hex 10
    
    openssl rand -base64 10
    

    https://www.openssl.org/docs/man1.0.2/man1/openssl-rand.html

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search