Моя відповідь є варіацією типової відповіді для пошуку "foobar" у ps
списку. Аргумент "-A" "ps"
є більш портативним, ніж "aux"
, я вважаю, але ця зміна не має значення для відповіді. Типова відповідь виглядає приблизно так:
$ ps -A -ww | grep [f]oobar
Натомість я використовую цю схему:
$ ps -A -ww | grep [^]]foobar
Основна перевага полягає в тому, що простіше писати сценарії за цією [^]]
схемою, оскільки ви просто з'єднаєте статичну струну з будь-яким шаблоном, який ви шукаєте. Вам не потрібно знімати першу букву рядка, потім вставити її між квадратними дужками, а потім знову з’єднати цю спільноту. Під час написання сценарію в оболонці простіше просто дотримуватися [^]]
шаблону, який ви шукали для пошуку. Нарізка струн у Bash - це некрасива річ, тому мій варіант цього уникає. Цей варіант говорить про те, що показують рядки, де візерунок відповідає БЕЗ провідного правого квадратного дужки]. Оскільки схема пошуку для виключення квадратної дужки насправді додає квадратну дужку до шаблону, то вона ніколи не буде відповідати собі.
Отже, ви можете написати переносну psgrep
команду наступним чином. Тут я припускаю деякі відмінності між Linux, OS X BSD та іншими. Це додає заголовки стовпців із ps
, надає більш спеціальний засібps
формат, який відповідає моїм потребам кращих, і відображає процеси, що перелічують додаткові, надзвичайно широкі, так що жоден аргумент командного рядка не пропускається Ну, більшість не пропускають. Ява, як Java, часто робить речі найгіршим можливим способом, тому деякі служби Java будуть проходити повз максимально допустиму довжину аргументів, за якою буде відстежувати таблицю процесів. Я вважаю, що це 1024 символи. Довжина команди, дозволена для запуску процесу, набагато довша, але таблиця процесу ядра не намагається відслідковувати що-небудь понад 1 К довжини. Після запуску команди список імен команди та аргументів не потрібен, тому те, що зберігається в таблиці процесів, є лише інформаційним.
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
grep --colour
.