ps aux | grep hogehoge で grep プロセスを出さない方法
友人にクイズで出されてわからなかったのだが、
$ ps aux | grep init root 1 0.0 0.0 23820 2016 ? Ss 03:02 0:00 /sbin/init account1 3154 0.0 0.0 7176 1016 pts/0 S+ 14:17 0:00 grep init
となるが、どうやって grep プロセスが表示に含まれるのを除去するか。もちろん ps aux | grep init | grep -v grep とかでもよいが、grep 1回で済ますには・・・?
$ ps aux | grep '[i]nit' root 1 0.0 0.0 23820 2016 ? Ss 03:02 0:00 /sbin/init
衝撃を受けました。
追記
pgrep -lf init という技も教えてもらいました。
追記2
$ touch init $ ps aux | grep [i]nit root 1 0.0 0.0 23816 2016 ? Ss 00:01 0:00 /sbin/init account1 2505 0.0 0.0 7176 1012 pts/0 S+ 00:19 0:00 grep init $ rm init $ ps aux | grep [i]nit root 1 0.0 0.0 23816 2016 ? Ss 00:01 0:00 /sbin/init
bash でも grep のパターンはシングルクォートで囲む必要がある。囲んでいないと、カレントにマッチするファイルがあった場合に bash がファイル名に展開してしまう。grep には上記のように展開済みの引数が渡されてしまい、意図した動作にならない。