如何从上一个命令的输出中分配终端变量

时间:2014-02-25 01:06:01

标签: macos terminal

我对终端脚本世界非常陌生。这就是我想要做的事情:

1) Find out the process that's using a given port (8000 in this case)
2) Kill that process

非常简单。我可以使用以下方式手动完成:

lsof -i tcp:8000 -- get the PID of what's using the port
kill -9 $PID -- terminate the app using the port

作为参考,这里正是使用lsof -i tcp:8000

时返回的内容
COMMAND   PID       USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
php     94735     MyUser    5u  IPv6 0x9fbd127eb623aacf      0t0  TCP localhost:irdmi (LISTEN)

这是我的问题:如何从lsof -i tcp:8000捕获PID值,以便我可以将该变量用于下一个命令?我知道如何创建我指定的变量..而不是那些动态制作的。

2 个答案:

答案 0 :(得分:14)

您正在寻找的东西称为command substitution。它允许您将命令的输出视为shell的输入。

例如:

$ mydate="$(date)"
$ echo "${mydate}"
Mon 24 Feb 2014 22:45:24 MST

也可以使用`backticks`代替美元符号和括号,但大多数shell style guides建议避免这样做。

在你的情况下,你可能想要做这样的事情:

$ PID="$(lsof -i tcp:8000 | grep TCP | awk '{print $2}')"
$ kill $PID

答案 1 :(得分:0)

这些方面应该有效:

lsof -i tcp:8000 | grep TCP | read cmd pid restofline
kill -9 $pid

在使用kill命令之前,只需回显它以确保。