我正在尝试编写一个简单的脚本来终止进程。我已经阅读了使用 bash 和 regex 在一行中查找并终止进程,所以请不要将我重定向到该处。
这是我的代码:
LINE=$(ps aux | grep '$1')
PROCESS=$LINE | awk '{print $2}'
echo $PROCESS
kill -9 $PROCESS
Run Code Online (Sandbox Code Playgroud)
我希望能够运行类似的东西
sh kill_proc.sh node 让它运行
kill -9 node
但我得到的是
kill_process.sh: line 2: User: command not found
Run Code Online (Sandbox Code Playgroud)
我发现当我登录时$PROCESS它是空的。有谁知道我做错了什么?
PROCESS=$(echo "$LINE" | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)
或者
PROCESS=$(ps aux | grep "$1" | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)
我不知道你为什么会收到你引用的错误。我无法重现它。当你这样说时:
PROCESS=$LINE | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
shell 将其扩展为如下所示:
PROCESS='mayoff 10732 ...' | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
(我缩短了 的值$LINE以使示例易于阅读。)
管道的第一个子命令设置变量PROCESS;这个变量设置命令没有输出,因此awk立即读取 EOF 并且不打印任何内容。并且由于管道的每个子命令都在子 shell 中运行,因此设置PROCESS仅在子 shell 中进行,而不是在运行脚本的父 shell 中进行,因此PROCESS仍然不会为脚本中的后续命令设置。
(请注意,某些版本可以bash在当前 shell 中而不是在子 shell 中运行管道的最后一个子命令,但这不会影响此示例。)
您不想PROCESS在子 shell 中进行设置并且在标准输入上不提供任何内容,而是希望提供toawk的值并将结果存储在当前 shell 中。因此,您需要运行一个命令,将 的值写入其标准输出,并将该标准输出连接到 的标准输入。命令可以做到这一点(或者命令,正如切普纳在他的回答中指出的那样)。LINEawkPROCESSLINEawkechoprintf
| 归档时间: |
|
| 查看次数: |
7264 次 |
| 最近记录: |