Tom*_*ica 40 shell pipe arguments
我注意到它|
用于将第一个命令的结果发送给另一个。我想杀死所有与名称匹配的进程。
这是 pgrep 通常所做的:
$ pgrep name
5089
5105
Run Code Online (Sandbox Code Playgroud)
并且多个参数似乎适用于kill
:
sudo kill 5089 5105
Run Code Online (Sandbox Code Playgroud)
但这是错误的:
pgrep name | kill
Run Code Online (Sandbox Code Playgroud)
那么如何正确操作呢?
cuo*_*glm 55
尝试这个:
pgrep name | xargs kill
Run Code Online (Sandbox Code Playgroud)
如果您使用pgrep name | kill
,则 的输出将pgrep name
馈送到 的标准输入kill
。因为kill
不从 stdin 读取参数,所以这行不通。
使用xargs
,它将kill
从标准输入构建参数。例子:
$ pgrep bash | xargs echo
5514 22298 23079
Run Code Online (Sandbox Code Playgroud)
回答一般而不是具体...
管道用于将一个程序的输出作为输入传递给另一个程序。
看起来您正在尝试将一个程序的输出用作另一个程序的命令行参数,这是不同的。
为此,请使用命令替换。
例如,如果你想运行
sudo kill 5089 5105
Run Code Online (Sandbox Code Playgroud)
你有一个pgrep name
输出命令5089 5105
你把它们放在一起就像
sudo kill $(pgrep name)
Run Code Online (Sandbox Code Playgroud)