Как сделать цикл списка (чтение каждой строки до конца), не сохраняя список в виде файла?

Команда ниже даст мне список пользователей, не имеющих минимального срока действия пароля 1 день. Это работает правильно.

awk -F: '$4 < 1 {print $1}' /etc/shadow 

Я хочу взять этот список и запустить …

 chage -m 1 $p 

где $ p – имя пользователя в каждой строке.

Обычно я сохраняю этот список в виде файла, а затем запускаю цикл while для него. Ниже приведена моя полная команда, чтобы изменить всех пользователей на 1 день минимального пароля.

 mkdir ./tmp awk -F: '$4  ./tmp/usernamelist while read p; do chage -m 1 $p done <./tmp/usernamelist rm -rf ./tmp/usernamelist 

Есть ли способ сделать то же самое логически, но без необходимости сохранения файла? Это лучшая практика?

Я думаю, что есть способ сделать это с помощью команды pipe, но я не могу найти правильный способ структурировать это.

Либо с трубкой

 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) 
 awk -F: '$4 < 1 {print $1}' /etc/shadow | xargs -r -L 1 chage -m 1 

-L 1 гарантирует, что каждая строка вывода awk передается в отдельный вызов chage , а -r гарантирует, что chage не запускается, если awk ничего не выводит (что, по общему признанию, в данном случае маловероятно) ,