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


31

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

$ pgrep name
5089
5105

そして、複数の引数が動作するようですkill

sudo kill 5089 5105

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

pgrep name | kill

それで、それを適切に行う方法は?


3
pkill。そして、それが存在しなかった場合、kill $(pgrep ...)
ミケル14年

これらの特定のコマンドについてだけでなく、コマンドチェーンの理解を深めることも求めていました。しかし...私が理解することを意図質問は歓迎され、質問のスコアから見ることができますように
トマーシュZato -復活モニカ

質問をより一般的なものにし、重複しないようにしたい場合は、投票することができます。
ミケル14年

申し訳ありませんが、誤って以前のコメントを削除してしまいました。私はタブレットを使っていますが、このサイトには本当に小さなボタンが並んでいます。
ミケル14年

あなたの質問はあなたが学ぶことができなかったことを尋ねているようではないので、私はただ投票したと言っていましたman pgrep。ダウンボットボタンは、質問が研究努力を示さないときのためのものであり、あなたの質問には何も見当たらないと言います。それが厳しいようでしたら申し訳ありません。
ミケル14年

回答:


42

これを試して:

pgrep name | xargs kill

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

を使用してxargskill標準入力からの引数を作成します。例:

$ pgrep bash | xargs echo
5514 22298 23079

5
スペースと改行の関係はありません。killがstdinの引数を読み取らないからです。
ミケル14年

@Mikel:間違いを修正しました。
クオンルム14年


5

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

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

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

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

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

sudo kill 5089 5105

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

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

sudo kill $(pgrep name)

どうもありがとう。これが他の初心者にも役立つことを願っています。
トマーシュザト-復帰モニカ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.