【发布时间】:2016-06-01 22:52:10
【问题描述】:
我在我的 bash 配置文件中写了一个别名来帮助我杀死没有完全关闭的流氓 Rails 服务器进程。这个别名很好用。
alias kill3000="lsof -i tcp: 3000 -t | xargs kill -9 | echo 'killed processes on port 3000'"
我想让它更通用,适用于在其他端口上工作的框架。我试图做一个类似的函数,所以我可以将端口号作为变量传递,但我得到了一个错误。我写的函数是这样的……
function killproc (){
"lsof -i tcp:$1 -t | xargs kill -9 | echo 'killed processes on port $1'"
}
但是,当我运行“killproc 3000”时,出现以下错误:
lsof: unacceptable port specification in: -i tcp:
我很难理解这个问题,感谢任何帮助。
【问题讨论】:
-
引用整行
"lsof -i ... killed ..$'"看起来很可疑。还要调试情况,学习使用set -vx ; ... cmd .... ; set +vx来查看shell 如何解释您的代码。以+开头的行显示所有变量值。所有"dbl 引用的字符串都“标准化”为'单引号字符串。祝你好运。 -
谢谢,
set -vx对发现问题很有帮助。该变量在重复,因此它正在寻找端口 3000 3000,这导致了错误。我不确定为什么会发生这种情况,但是运行exec bash为我解决了这个问题。感谢您的帮助!
标签: macos shell unix terminal lsof