La mia risposta è una variazione della risposta tipica per la ricerca di "foobar" in un elenco "ps". L'argomento di "-A" "ps" è più portabile di "aux", credo, ma questo cambiamento è irrilevante per la risposta. La risposta tipica è questa:
$ ps -A -ww | grep [f]oobar
Invece uso questo modello:
$ ps -A -ww | grep [^]]foobar
Il vantaggio principale è che è più semplice scrivere script basati su questi schemi perché concateni semplicemente una stringa statica "[^]]" con qualsiasi modello tu stia cercando. Non è necessario rimuovere la prima lettera della stringa, quindi inserirla tra le parentesi quadre e quindi concatenarla nuovamente insieme. Quando si esegue lo scripting in shell, è più semplice incollare "[^]]" davanti al modello che stavi cercando. Il taglio delle corde in Bash è una cosa brutta, quindi la mia variazione lo evita. Questa variazione dice mostra le linee in cui il modello corrisponde SENZA una parentesi quadra di destra]. Poiché il modello di ricerca per escludere una parentesi quadra aggiunge effettivamente la parentesi quadra al modello, allora non corrisponderà mai a se stesso.
Quindi potresti scrivere un comando 'psgrep' portatile come segue. Qui, tengo conto delle differenze tra Linux, OS X BSD e altri. Questo aggiunge le intestazioni di colonna da 'ps', fornisce un formato 'ps' più personalizzato che si adatta alle mie esigenze di scommettitori e mostra i processi che elencano extra, extra larghi in modo che nessuno degli argomenti della riga di comando venga perso. Bene, molti non sono mancati. Essendo Java, spesso fa le cose nel modo peggiore possibile, quindi alcuni servizi Java correranno oltre la lunghezza massima consentita degli argomenti che la tabella dei processi terrà traccia. Credo che questo sia 1024 caratteri. La lunghezza della sola riga di comando consentita per avviare un processo è molto più lunga, ma la tabella dei processi del kernel non si preoccupa di tenere traccia di qualsiasi lunghezza superiore a 1 KB. Una volta avviato il comando, l'elenco dei nomi dei comandi e degli argomenti non è '
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
conpgrep
(opgrep -f
).