【问题标题】:Awk not working inside bash scriptawk 在 bash 脚本中不起作用
【发布时间】:2023-07-26 00:46:01
【问题描述】:

我正在尝试编写 bash 脚本并尝试从用户那里获取输入并执行 kill 命令以停止特定的 tomcat。

...

read user_input
if [ "$user_input" = "2" ]
then
ps -ef | grep "search-tomcat" |awk {'"'"'print $2'"'"'}| xargs kill -9
echo "Search Tomcat Shut Down"
fi

...

我已经确认行了

ps -ef | grep "搜索-tomcat"

在脚本中工作正常,但是:

ps -ef | grep "search-tomcat" |awk {'"'"'print $2'"'"'}

不会在脚本中产生任何结果,但会在终端中给出所需的输出,因此 awk 命令肯定有问题

【问题讨论】:

  • 你可以试试awk '{print "\047" $2 "\047"}' ?
  • 这似乎行得通!但现在我停留在最后一部分:将结果作为参数传递给 xargs。
  • @BhuvanRawal:你有pkill 命令可用吗?
  • 那你只需要pkill -9 -f "search-tomcat"
  • 使用左上角编辑框菜单中的{}工具在突出显示的文本上获取格式正确的代码、数据、输出和错误消息;-) 祝你好运!

标签: linux bash shell awk scripting


【解决方案1】:

xargs 可能很棘手 - 尝试:

kill -9 $(ps -ef | awk '/search-tomcat/ {print $2}')

如果您更喜欢使用 xargs,请查看手册页以了解您的目标操作系统的选项(即 xargs -n。)

还要注意'kill -9' 是一种非正常的进程退出机制(即可能的文件损坏,其他奇怪)所以我建议仅作为最后的手段使用...

:)

【讨论】:

  • 感谢您的意见@Dale_Reagan。该命令出色地工作。我知道使用 kill -9 不是一个好主意,但我已经看到 tomcats 不会通过常规 catalina.sh stop 停止对此有任何见解?
  • 抱歉,没有真正使用 Tomcat 的经验,但请理解有时需要 kill -9。小心僵尸! :)
  • 僵尸会很痛苦。但在我的情况下,以某种方式杀死几乎总是可以正常工作。
  • 感谢@Dale 的回答。
最近更新 更多