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
The command works fine both in personal Linux OS and the Azure Cloud Shell Bash.
Azure Cloud Shell Bash:
Personal Linux OS:
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 thehead
.I prefer using
openssl
for creating random strings (as hex or base64):https://www.openssl.org/docs/man1.0.2/man1/openssl-rand.html