关于 bash:无法从脚本循环中杀死 PID

can't kill PID from script loop

我需要一个脚本函数来获取剪贴板(剪贴板管理器)的 pid 并杀死剪贴板。我认为非常简单的东西,除了出于某种原因,shell 正在吐出一个关于杀死 PID 的错误。这是我的功能:

1
2
3
4
5
6
stat=0
while [["$stat" == 0 ]] ; do
    clipitPid=$(ps aux|egrep -m 1"[ \\t]{1,}[0-9]{1,2}:[0-9]{1,2}[ \\t]*clipit$"|sed -r"s/^[^ ]*[ ]*([0-9]{3,5})[ \\t]{1,}.*$/\\1/") #; echo"\\$clipitPid: ${clipitPid}"
    kill"$clipitPid" 0>/dev/null 1>/dev/null 2>/dev/null
    stat="$?"
done

这是终端错误:

1
2
3
4
5
10:12 ~ $ stat=0 ; while [["$stat" == 0 ]] ; do clipitPid=$(ps aux|egrep"[ \\t]{1,}[0-9]{1,2}:[0-9]{1,2}[ \\t]*clipit$"|sed -r"s/^[^ ]*[ ]*([0-9]{3,5})[ \\t]{1,}.*$/\\1/") ; echo"\\$clipitPid: ${clipitPid}" ; kill"$clipitPid" 0>/dev/null 1>/dev/null 2>/dev/null ; stat="$?" ; done
$clipitPid: 24760
24791
bash: kill: 24760
24791: arguments must be process or job IDs

我已经尝试将发送输出删除为 null,这没有任何区别。
我有两个 clipit 实例正在运行,以确保两个 PID 都被检测到并被杀死;但是,PID 的回声正常,但没有被核弹。但是,如果我手动"杀死 24760 24791",则 PID 将被杀死:

1
2
3
4
10:12 ~ $ kill 24760 24791
10:12 ~ $ ps aux|grep clipit
[3]-  Terminated              clipit
[4]+  Terminated              clipit

我在这里有什么错误的任何想法,我会很感激阅读它们。

编辑

实际上,如果我只有一个 clipit 实例正在运行,那么它会被上面的在线程序杀死。 2 个或更多剪辑,然后它无法杀死任何剪辑,但检索 PID 正常。


n


n


n


一开始我无法破译你相当复杂的 egrep,但如果你试图杀死某个进程 ID,那该怎么办:

1
kill `ps ax | fgrep clipit | fgrep -v fgrep | awk '{ print $1 }'`

awk 是古老的 AT 之一