Как распечатать вывод команды ps с именем столбца?

Много заимствований из ответа Денниса Каарсемейкера:

PROMPT_COMMAND='_abbrev_pwd=$(sed -e "s:$HOME:~:" -e "s:/\(.\)[^/]*:/\1:g" <<< "$(dirname "$PWD")")/"$(basename "$PWD")"'
PS1='\u@\h ${_abbrev_pwd}> '

Переменная PROMPT _COMMAND — это специальная переменная bash , которая выполняется каждый раз перед выводом подсказки. Код здесь устанавливает переменную с именем _abbrev_pwdдля конкатенации следующих элементов:

  • вывод команды sed:$(sed -e... <<<...)
  • косая черта/
  • "текущая" директория:$(basename "$PWD")

Сама команда sed принимает в качестве входных данных строку здесь -; что здесь строка -является результатом вызова dirname "$PWD"для удаления текущего каталога. Затем эта строка подлежит двум заменам (, указанным в параметрах -esed ):

.

  1. замените любой внешний вид вашего каталога "$HOME" на тильду и
  2. заменить любой элемент пути (косой чертой, захваченным одиночным символом ., затем любое количество не -косой черты -)косой чертой, за которой следует (захваченный )] один символ; повторите, что шаблон соответствует "глобально" с флагом g. Я использовал :в качестве разделителя поиска и замены sedвместо обычного /, чтобы избежать синдрома наклона зубочистки при попытке уйти от желаемого вперед косая черта.

Наконец, мы настроили PS1 на использование переменной _abbrev_pwdвместо $PWD.

0
06.04.2021, 11:19
1 ответ

Заголовки столбцов для ps — это первое, что выводится при выполнении команды. Если вы просто хотите посмотреть, что представляют собой заголовки, вы можете сделать что-то простое, например, передать ps в голову, чтобы посмотреть. Что-то вроде этого ps | head -n1покажет вам только заголовки столбцов.

Если вы хотите видеть заголовки в выходных данных ps, которые могут быть длинными, вы можете направить свою команду psв awk.

Может быть более умный способ справиться с этим вawk(или просто в общем ), но вот что я бы сделал... Я буду использовать ps -efв качестве своего примера ps, но я думаю, что это будет работать на что угодно.

ps -ef | awk '{if(NR==1){HEADER=$0} if(NR%10 == 1){print "\n"HEADER}{print $0}}'

Оператор awk сначала проверяет, находится ли он в первой строке, и если да, то устанавливает переменную в значение этой строки, которую я вызываюHEADER:if(NR==1){HEADER=$0}

Но вы, вероятно, хотите печатать заголовок только время от времени, поэтому следующая часть проверяет, делится ли номер записи (в этом случае строка )на 10, и если это так, печать новой строки (, чтобы разбить его и сделать читаемым )и строку заголовка. Вы можете изменить 10 на меньшее число, чтобы заголовки печатались чаще, или на большее число, чтобы они печатались реже :if(NR%10 ==1){print "\n"HEADER}

.

Последняя часть оператора awk просто печатает строку, в которой находится awk, что является обычным выводом изps:{print $0}.

0
28.04.2021, 22:54

Теги

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