用于终止某个端口上的服务器的脚本:
#!/bin/bash
PORT="$1"
SIGNAL="$2"
if [ "${SIGNAL}" != "" ]; then SIGNAL=" -${SIGNAL}"; fi
lsof -i:"${PORT}" |\
grep -e "localhost:${PORT}" -e TCP -e LISTEN |\
tr -s ' ' |\
cut -d' ' -f2 |\
tee /dev/tty |\
xargs --no-run-if-empty kill "$SIGNAL"
作品:killbyport 4242
但是,如果我想做 akill -9
我会做: killbyport 4242 9
,并且错误:
kill: (-9): No such process
xargs
和不合作 - 我该kill
如何解决?
(PS:我想修复此脚本,而不是将其更改为其他内容。它几乎可以工作。)
问题是你明确地添加了一个空格
SIGNAL
:然后用引号引用它:
因为kill
is 看到一个不以破折号开头的参数(因为它以空格开头,然后是破折号),所以它不被视为一个选项,而是一个普通的参数——在这种情况下是一个 PID。一个快速的解决方法是不将空间添加到SIGNAL
:SIGNAL
但是,当它为空时,这是没有意义的。见但如果……怎么办?. 第一个示例 (ignorecase
) 几乎完全符合您的情况。@G-Man 的回答让我朝着正确的方向前进。为了完整起见,解决方法是改用它:
这样做的结果是运行命令
kill " -9"
... 这是错误的。Kill 将解释" -9"
为 pid 而不是"-9"
信号 9。你的引用太聪明了。