คำตอบของฉันคือรูปแบบของคำตอบทั่วไปสำหรับการค้นหา "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 มันมักจะทำสิ่งต่าง ๆ ในวิธีที่แย่ที่สุดดังนั้นคุณจะต้องให้บริการ java บางอย่างผ่านความยาวสูงสุดของอาร์กิวเมนต์ที่ตารางกระบวนการจะติดตาม ฉันเชื่อว่านี่คือ 1024 ตัวอักษร ความยาวคำสั่ง - โลนที่ได้รับอนุญาตให้เริ่มกระบวนการมีความยาวมากขึ้น แต่ตารางกระบวนการเคอร์เนลไม่สนใจที่จะติดตามสิ่งใดที่มีความยาวเกิน 1K เมื่อคำสั่งเริ่มต้นแล้วคำสั่งชื่อและรายการอาร์กิวเมนต์ไม่จำเป็นต้องใช้ดังนั้นสิ่งที่ได้รับการจัดเก็บในตารางกระบวนการเป็นเพียงการให้ข้อมูล
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
และสามารถเป็นบิตทำให้เข้าใจผิดเมื่อใช้กับ