Cevabım bir ps
listede "foobar" için arama tipik cevabı bir varyasyondur . Argümanı , sanırım "-A" "ps"
, daha taşınabilir olduğunu "aux"
, ancak bu değişiklik cevabı ile ilgisiz. Tipik cevap şöyle görünür:
$ ps -A -ww | grep [f]oobar
Bunun yerine bu deseni kullanıyorum:
$ ps -A -ww | grep [^]]foobar
Asıl avantajı, bu kalıplara dayanarak kod yazmanın daha kolay olmasıdır, çünkü aradığınız [^]]
desen ile statik bir dizgiyi birleştirirsiniz . Dizenin ilk harfini çıkarmanız, sonra köşeli parantezin arasına yerleştirmeniz ve sonra tekrar bir araya getirmeniz gerekmez. Kabuk içinde komut dosyası [^]]
yazarken, aradığınız desenin önüne kolayca yapıştırılabilir . Bash'de dize dilimleme çirkin bir şeydir, bu yüzden varyasyonum bundan kaçınır. Bu varyasyonda, desenin lider bir sağ köşeli ayraç OLMADIĞINDA desenle eşleştiği satırlar gösteriliyor. Köşeli parantezi hariç tutacak olan arama deseni aslında köşeli parantezi desene eklerse, o zaman hiçbir zaman kendi kendine eşleşmez.
Böylece taşınabilir bir psgrep
komutu aşağıdaki gibi yazabilirsiniz . Burada, Linux, OS X BSD ve diğerleri arasındaki farklar için bir miktar izin veriyorum. Bu sütun başlıklarını ekler, ps
daha fazla özel sağlarps
ihtiyaçlarıma göre daha iyi biçimli formatlar ve komut satırı argümanlarının hiçbirinin kaçırılmaması için ekstra geniş ve ekstra geniş listeleme işlemlerini görüntüler. Pek çoğu kaçırılmamış. Java, Java olduğundan, genellikle işleri en kötü şekilde yapar, bu nedenle bazı java servisleri, işlem tablosunun izleyeceği izin verilen maksimum bağımsız değişkenler uzunluğunu aşar. Bunun 1024 karakter olduğuna inanıyorum. Bir işlemi başlatmak için izin verilen komut uzunluğu çok daha uzundur, ancak çekirdek işlem tablosu 1K'nin üzerinde bir şey izlemekten zahmete girmez. Komut başlatıldığında, komut adı ve argüman listesine karşı ihtiyaç duyulmaz, bu nedenle işlem tablosunda saklanan şey yalnızca bilgi amaçlıdır.
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
.