「kill | pgrep dnsspoof」と「kill `pgrep dnsspoof`」の違い

「kill | pgrep dnsspoof」と「kill `pgrep dnsspoof`」の違い

私はこれが|プログラムの出力を他のプログラムの入力として提供するために使用されると思います。だから試してみましたが、kill | pgrep dnsspoof成功しませんでした。だから私は努力しました

kill `pgrep dnsspoof`

効果がありました。誰もがこれらのコマンドが内部的にどのように機能するかを教えてもらえますか?

答え1

|あるプログラムの出力を別のプログラムに供給することは正確です。データleftフローがright

pgrep dnsspoof | kill

pgrepdnsspoofのプロセス番号が見つかり、提供されてから終了するkillため、これは機能します。 Killはコマンドラインで殺す項目だけを見るので、これはうまくいかないことがわかりました。

pgrepだから私たちはコマンドラインに出力を入れなければなりません。これが `pgrep dnsspoof` 現代で$(pgrep dnsspoof)行うことです。バックティックまたは角かっこ内でコマンドを実行し、コマンドの場所に出力を配置します。したがって、pgrep dnsspoof出力がある場合、5432runコマンドはでありkill 5432、これはKillプログラムを呼び出す正しい方法です。

を使用すると、いくつかの利点があります$( )。ネストする方が簡単で、エスケープすべき項目が少なくなります。したがって、シェルがそれをサポートしている場合は、優先的に使用する必要があります` `

答え2

あなたは正しいですが、|逆の方法でコマンドを実行しています。実行し pgrep dnsspoofてから出力を input に送信する必要がありますkillが、標準入力のコマンドを受け入れないため、コマンドのパラメータにスペルを指定する必要があります。xargsSTDINストリームデータを読み取り、各行をスペースで区切られた引数に変換してコマンドに使用する必要があります。

pgrep dnsspoof | xargs kill

killただし、コマンドの出力を入力に送信する方法pgrep dnsspoofは意味がありません。

関連情報