以下のコマンドは、最小パスワード使用期間が1日ではないユーザーのリストを提供します。これはうまくいきます。
awk -F: '$4 < 1 {print $1}' /etc/shadow
このリストを使って実行したいのですが...
chage -m 1 $p
ここで、 $p は各行のユーザー名です。
通常、私はこのリストをファイルに保存し、それに対してwhileループを実行します。すべてのユーザーの最小パスワードを1日に変更する完全なコマンドについては、以下を参照してください。
mkdir ./tmp
awk -F: '$4 < 1 {print $1}' /etc/shadow > ./tmp/usernamelist
while read p; do
chage -m 1 $p
done <./tmp/usernamelist
rm -rf ./tmp/usernamelist
ファイルを保存せずに論理的に同じことを行う方法はありますか?これはベストプラクティスですか?
パイプコマンドを使用してこれを行う方法があると思いますが、正しい構造化方法が見つかりません。
答え1
パイプを使用するか、
awk -F: '$4 < 1 {print $1}' /etc/shadow |
while read p; do
chage -m 1 "$p"
done
またはプロセスと交換
while read p; do
chage -m 1 "$p"
done < <(awk -F: '$4 < 1 {print $1}' /etc/shadow)
答え2
awk -F: '$4 < 1 {print $1}' /etc/shadow | xargs -r -L 1 chage -m 1
-L 1
awk 出力の各行が別々の出力に渡されることを確認します。チャグ電話して-r
確認してくださいチャグawkが何も印刷しないと、runは実行されません(もちろん、この場合は少ない可能性があります)。