Наконец-то я нашел способ добиться этого. Я хотел избежать файловых операций (tmpfs и подобных) по причинам производительности и задержки. Хитрость заключается в том, чтобы в двух аргументах команды dwdiff
или wdiff
указать, что выход команды is и was в пределах одной итерации. Подстановка процессов была моей рукой помощи:
while true; do p1=$p2; p2=$(clear; iotop -ob -n1);
dwdiff -y "\010" -1 -c <(echo "$p1") <(echo "$p2"); sleep 1; done
Команда -y "\010"
удаляет пробел перед измененным словом, чтобы столбцы были выровнены. $p1
и $p2
используются для сохранения области видимости для подстановок процесса . Предоставление вывода в подстановках напрямую не сработало для меня. Я получил подсказку из этого сообщения.
Возможно, есть более простое решение, а я просто слишком усложнил задачу. Не стесняйтесь опубликовать его!
Обратите внимание, что useradd
может быть более строгим, чем то, что действительно допустимо в качестве имени пользователя. Правила относительно допустимого имени пользователя также могут измениться с помощью параметров конфигурации PAM и nsswitch.
Стандарт POSIX говорит, что имена пользователей должны быть из «переносимого набора символов имени файла», но первый символ не должен быть дефисом.
Переносимый набор символов имени файла представляет собой символы A -Z a -z 0 -9.-_
Обратите внимание, что это означает, что что-то вроде «1337» является допустимым именем пользователя в соответствии с этим стандартом, что может вызвать проблемы в других местах.
Итак, в целях безопасности я бы использовал такой шаблон, как [A -Za -z][A -Za -z0 -9. _-]+