Много заимствований из ответа Денниса Каарсемейкера:
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 -e... <<<...)
/
$(basename "$PWD")
Сама команда sed принимает в качестве входных данных строку здесь -; что здесь строка -является результатом вызова dirname "$PWD"
для удаления текущего каталога. Затем эта строка подлежит двум заменам (, указанным в параметрах -e
sed ):
.
.
, затем любое количество не -косой черты -)косой чертой, за которой следует (захваченный )] один символ; повторите, что шаблон соответствует "глобально" с флагом g
. Я использовал :
в качестве разделителя поиска и замены sed
вместо обычного /
, чтобы избежать синдрома наклона зубочистки при попытке уйти от желаемого вперед косая черта. Наконец, мы настроили PS1 на использование переменной _abbrev_pwd
вместо $PWD
.
Заголовки столбцов для 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}
.