
私はこれが|
プログラムの出力を他のプログラムの入力として提供するために使用されると思います。だから試してみましたが、kill | pgrep dnsspoof
成功しませんでした。だから私は努力しました
kill `pgrep dnsspoof`
効果がありました。誰もがこれらのコマンドが内部的にどのように機能するかを教えてもらえますか?
答え1
|
あるプログラムの出力を別のプログラムに供給することは正確です。データleft
フローがright
。
pgrep dnsspoof | kill
pgrep
dnsspoofのプロセス番号が見つかり、提供されてから終了するkill
ため、これは機能します。 Killはコマンドラインで殺す項目だけを見るので、これはうまくいかないことがわかりました。
pgrep
だから私たちはコマンドラインに出力を入れなければなりません。これが
`pgrep dnsspoof`
現代で$(pgrep dnsspoof)
行うことです。バックティックまたは角かっこ内でコマンドを実行し、コマンドの場所に出力を配置します。したがって、pgrep dnsspoof
出力がある場合、5432
runコマンドはでありkill 5432
、これはKillプログラムを呼び出す正しい方法です。
を使用すると、いくつかの利点があります$( )
。ネストする方が簡単で、エスケープすべき項目が少なくなります。したがって、シェルがそれをサポートしている場合は、優先的に使用する必要があります` `
。
答え2
あなたは正しいですが、|
逆の方法でコマンドを実行しています。実行し pgrep dnsspoof
てから出力を input に送信する必要がありますkill
が、標準入力のコマンドを受け入れないため、コマンドのパラメータにスペルを指定する必要があります。xargs
STDINストリームデータを読み取り、各行をスペースで区切られた引数に変換してコマンドに使用する必要があります。
pgrep dnsspoof | xargs kill
kill
ただし、コマンドの出力を入力に送信する方法pgrep dnsspoof
は意味がありません。