GNU ps
поддерживает параметры в стиле BSD, параметры в стиле UNIX и длинные параметры GNU. Является ли использование одного из этих типов (в сценариях и в командной строке) предпочтительным перед другими?
Из справочной страницы у меня сложилось впечатление, что функциональность стилей опций частично не перекрывается.
Вообще говоря, просто используйте набор параметров, который дает вам желаемый результат.
Ради здравомыслия и переносимости (других людей) я предлагаю придерживаться аргументов в стиле BSD или SysV - по большей части современные системы принимают оба этих набора аргументов, и таким образом, когда сценарий, который вы написали для решения проблемы в Linux попадает в систему, которая не понимает длинных опций в стиле GNU, и она все еще работает (весь мир не машина Linux).
Без разницы POSIX говорит. Я не собираюсь вдаваться в подробности, но я полагаю, что скрипты, использующие ps, в любом случае будут не очень переносимы.
Является ли использование одного из этих типов (в сценариях и в командной строке) предпочтительным по сравнению с другими?
Это во многом зависит от целевых платформ, на которых должны запускаться ваши скрипты. Если ваши сценарии должны запускаться только в Linux, используйте параметры в стиле GNU, если они также должны быть использованы в * BSD, используйте параметры в стиле BSD и, наконец, что не менее важно, если они должны работать в широком диапазоне unixoid-систем (например, Solaris) идут с опциями в стиле UNIX.
Я думаю, вы обнаружите, что варианты POSIX или SVR4 гораздо более распространены.
Обычно я анализирую вывод uname и выбираю правильные / bin / ps, / usr / bin / ps и аргументы на основе этого значения. На неподдерживаемых платформах я просто выхожу, не думаю. В Linux я установил для $ PS_PERSONALITY значение "posix" и отключил $ I_WANT_A_BROKEN_PS на случай, если пользователь по какой-то причине установил этот параметр. Это всего лишь защитная мера.
Стиль GNU getopt_long () полезен только в Linux, и даже если это то, к чему вы стремитесь, люди гораздо лучше знакомы с короткими параметрами.