Переведите флаги PS GNU в стандартные флаги

Если это всегда запускается с s[number]colon Вы могли сделать (с GNU sed):

sed -r '/^s[0-9]+:/s/ttyS0/something_else/' infile

Который изменяет любую строку, которая запускается с regex, адаптируйтесь для удовлетворения потребностям.

3
23.12.2013, 09:22
1 ответ

В соответствии с Linux, основным эффектом ps x должен включать все процессы, работающие как того же пользователя. По умолчанию, ps только включает процессы, работающие на том же терминале. Напротив, значение по умолчанию BSD должно включать процессы, которые имеют терминал управления, является ли это тем же или нет. Соответствующая опция BSD -x. Кроме того, ps x выбирает немного отличающийся выходной формат. Синтаксис POSIX для соответствия тем же процессам

ps -A -u "$USER"

Если Вы анализируете вывод ps обязательно используйте -o отметьте для управления, какие столбцы печатаются. Обратите внимание, что команды в моем ответе не печатают точно те же столбцы.

Для поиска процесса ssh-агента действительно необходимо передать некоторые опции, так как и Linux и BSD скрывают процессы, которые не связаны ни с каким терминалом по умолчанию, и ssh-агенту свойственно не быть связанным с терминалом.

if [ -z "$SSH_AGENT_PID" ]; then
  SSH_AGENT_PID=$(ps -A -u "$USER" -o comm= | grep ssh-agent | head -n 1)
fi
if [ -n "$SSH_AGENT_PID" ]; then
  …
1
27.01.2020, 21:31
  • 1
    , Является мной неправильно читающий различные страницы справочника или не является там никакой комбинацией флагов, которые будут работать над OS X, BSD и Linux? –  Hank Gay 18.12.2013, 19:07
  • 2
    @HankGay Мой фрагмент кода должен работать над всеми современными нельдами. Я добавил ссылку к стандарту. –  Gilles 'SO- stop being evil' 18.12.2013, 20:36
  • 3
    На FreeBSD я должен был переключить его на -U вместо -u. На OpenBSD это не имеет -A. Мне довольно грустно, что мои любимые BSDs не повинуются стандарту. –  Hank Gay 18.12.2013, 22:14

Теги

Похожие вопросы