web-dev-qa-db-ja.com

pgrepをkillでチェーンできますか?

|は、最初のコマンドの結果を別のコマンドに送信するために使用されます。名前に一致するすべてのプロセスを強制終了したい。
これは、pgrepが通常行うことです。

$ pgrep name
5089
5105

そして、複数の引数がkillで機能するようです:

Sudo kill 5089 5105

しかし、これは間違っています:

pgrep name | kill

それを正しく行うにはどうすればよいですか?

これを試して:

pgrep name | xargs kill

pgrep name | killを使用する場合、pgrep nameの出力はkillのstdinにフィードされます。 killは標準入力から引数を読み取らないため、これは機能しません。

xargsを使用して、stdinからkillの引数を作成します。例:

$ pgrep bash | xargs echo
5514 22298 23079
46
cuonglm

これはうまくいくはずです:

pkill name

また、manページを読むことをお勧めします。

特定ではなく一般に答えるために...

パイプは、あるプログラムからの出力をinputとして別のプログラムに渡すためのものです。

あるプログラムの出力を別のプログラムへのコマンドライン引数として使用しようとしているようですが、これは異なります。

これを行うには、 コマンド置換 を使用します。

たとえば、実行したい場合

Sudo kill 5089 5105

そして、あなたはpgrep nameを出力するコマンド5089 5105を持っています

あなたはそれらを一緒にまとめます

Sudo kill $(pgrep name)
5
Mikel