Это выглядит как идеальная возможность нанять вас xargs(или GNU Parallel ):
getent passwd \
| awk -F: '$3>=1000 && $1!="nfsnobody" {print $1}' \
| xargs -I{} \
echo xfs_quota -x -c \"limit bsoft=5g bhard=6g {}\" /home
# output:
# xfs_quota -x -c "limit bsoft=5g bhard=6g userone" /home
# xfs_quota -x -c "limit bsoft=5g bhard=6g usertwo" /home
Преимущество использования xargsили parallelзаключается в том, что вы можете просто удалить,echo когда будете готовы запустить команду по-настоящему (возможно, заменив ее sudo, если необходимо).
Вы также можете использовать опции -p/ --interactive(последние только для GNU) или --dry-run( parallelтолько) этих утилит , чтобы получить подтверждение перед запуском каждого или просто посмотреть, что будет запущено, прежде чем запускать его.
Общий метод, использованный выше, должен работать в большинстве Unix-систем и не требует специфических для GNU xargsопций. Двойные кавычки делают необходимость быть «убежали» , так что они появляются буквально на выходе. Обратите внимание , что «строка замены» {}, в xargs -I{}может быть все , что угодно, и -Iпредполагает -L1(запустить одну команду за входной линии , а не дозированием их).
GNU Parallel не требует -Iопции ( {}это замена строки по умолчанию), и дает вам мгновенный бонус работает много рабочих мест , параллельно, даже если вы не хотите заморачиваться узнать о какой - либо из его других особенностей .
В качестве примечания, я даже не уверен , что xfs_quota«S -cопция должна быть использована , как это, хотя у меня нет XFS не файловые системы удобно проверить. Вам, возможно, даже не понадобилось иметь дело с строкой в кавычках (если вы не ожидаете, что имена пользователей с пробелами в них, что я думаю, возможно), так как похоже, что вы можете задать несколько -cпараметров в одной командной строке, в зависимости от на страницу xfsprogsруководства, включенную с 4.5.