Моя відповідь є варіацією типової відповіді для пошуку "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 К довжини. Після запуску команди команда-ім'я та список аргументів isn '
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
}
ps aux |grep
наpgrep
(абоpgrep -f
).