我正在尝试编写一个简单的脚本来终止进程。我已经读过使用 bash 和正则表达式在一行中查找并终止进程所以请不要将我重定向到此。
这是我的代码:
LINE=$(ps aux | grep '$1')
PROCESS=$LINE | awk '{print $2}'
echo $PROCESS
kill -9 $PROCESS
我希望能够运行类似的东西
sh kill_proc.sh node
并让它运行
kill -9 node
但我得到的是
kill_process.sh: line 2: User: command not found
我发现当我登录时$PROCESS
它是空的。
有谁知道我做错了什么?
PROCESS=$(echo "$LINE" | awk '{print $2}')
or
PROCESS=$(ps aux | grep "$1" | awk '{print $2}')
我不知道你为什么会收到你引用的错误。我无法重现它。当你这样说时:
PROCESS=$LINE | awk '{print $2}'
shell 将其扩展为如下所示:
PROCESS='mayoff 10732 ...' | awk '{print $2}'
(我已经缩短了$LINE
使示例可读。)
管道的第一个子命令设置变量PROCESS
;这个变量设置命令没有输出,所以awk
立即读取 EOF 并且不打印任何内容。由于管道的每个子命令都在子 shell 中运行,因此设置PROCESS
仅在子 shell 中发生,而不是在运行脚本的父 shell 中发生,因此PROCESS
仍未为脚本中的后续命令设置。
(请注意,某些版本bash
可以在当前 shell 中而不是在子 shell 中运行管道的最后一个子命令,但这不会影响此示例。)
而不是设置PROCESS
在子壳中并且不提供任何内容awk
在标准输入上,您想要提供以下值LINE
to awk
并将结果存储在PROCESS
在当前外壳中。所以你需要运行一个命令来写入值LINE
到它的标准输出,并将该标准输出连接到awk
. The echo
命令可以做到这一点(或printf
命令,正如切普纳在他的回答中指出的那样)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)