Moja odpowiedź jest odmianą typowej odpowiedzi dotyczącej wyszukiwania „foobar” na ps
liście. Argument "-A" "ps"
jest bardziej przenośny niż "aux"
, jak sądzę, ale ta zmiana nie ma znaczenia dla odpowiedzi. Typowa odpowiedź wygląda następująco:
$ ps -A -ww | grep [f]oobar
Zamiast tego używam tego wzoru:
$ ps -A -ww | grep [^]]foobar
Główną zaletą jest to, że łatwiej jest pisać skrypty oparte na tych wzorcach, ponieważ po prostu łączy się ciąg statyczny [^]]
z dowolnym szukanym wzorcem. Nie musisz zdejmować pierwszej litery sznurka, a następnie wstawiać go między kwadratowe nawiasy klamrowe, a następnie ponownie łączyć je z powrotem. Podczas pisania skryptów w powłoce łatwiej jest po prostu trzymać [^]]
się wzoru, którego szukałeś. Przecinanie strun w Bash jest brzydką rzeczą, więc moja odmiana tego unika. Ta odmiana mówi, że pokaż linie, w których wzór pasuje BEZ wiodącego prawego nawiasu kwadratowego]. Ponieważ wzorzec wyszukiwania wykluczający nawias kwadratowy faktycznie dodaje nawias kwadratowy do wzorca, nigdy nie będzie pasował do siebie.
Możesz więc napisać przenośne psgrep
polecenie w następujący sposób. Tutaj uwzględniam różnice między Linuksem, OS X BSD i innymi. To dodaje nagłówki kolumn z ps
, zapewnia bardziej niestandardoweps
Format, który lepiej odpowiada moim potrzebom, wyświetla lepiej procesy i wyświetla listę wyjątkowo, bardzo szeroką, aby żaden z argumentów wiersza poleceń nie został pominięty. Cóż, większość nie jest pominięta. Java, która jest Javą, często robi wszystko w najgorszy możliwy sposób, więc niektóre usługi java będą działać po przekroczeniu maksymalnej dozwolonej długości argumentów, które śledzi tabela procesów. Myślę, że to 1024 znaki. Długość pojedynczego polecenia pozwalająca na uruchomienie procesu jest znacznie dłuższa, ale tabela procesów jądra nie zadaje sobie trudu, aby śledzić wszystko o długości przekraczającej 1 K. Po uruchomieniu polecenia nazwa-polecenia i lista argumentów nie są potrzebne, więc to, co jest przechowywane w tabeli procesów, ma jedynie charakter informacyjny.
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
.