bashスクリプトのテキストファイルで作成されたユーザーに対してランダムなパスワードを生成し、そのパスワードをテキストファイルに保存しようとしています。これが私がすることです。
うまく機能し、テキストファイルからユーザーを作成し、LOLファイルにもパスワードを出力しますが、生成されたユーザーのパスワードは機能しません。
ここに私のコードがあります。これにご協力いただきありがとうございます。
while read line || [ -n "$line" ] # protect against no newline for last line
do name=$line
pass=$(cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 8| head -n 1 >> lol)
sudo useradd $name -m
sudo usermod -p $(echo $pass | openssl passwd -1 -stdin) $name
echo "The user - $name - has been created!"
done < "$fname" # double-quote fname echo
答え1
コマンド置換の戻り値はサブシェルのstdoutです。
lol
次の行では、出力をサブシェルのファイルにリダイレクトしました。したがって、変数に保存する戻り値はありませんpass
。
pass=$(cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 8| head -n 1 >> lol)
次の行は、次のように2つの部分に分割できます。
pass=$(cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 8| head -n 1)
echo "$pass" >> lol
または以下を使用してくださいtee -a
。
pass=$(cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 8| head -n 1 | tee -a lol)